GCC下的2字节(UCS-2)宽字符串
-
04-10-2019 - |
题
将视觉C ++项目移植到GCC时,我发现WCHAR_T数据类型默认为4字节UTF-32。我可以使用编译器选项对其进行覆盖,但是RTL的整个WCS*(WCSLEN,WCSCMP等)的一部分是无法使用的,因为它假定为4字节宽字符串。
目前,我从头开始重新实现了5-6个功能,并#DEDEDEDIND我的实现。但是,有一个更优雅的选择 - 例如,与2字节WCHAR-T静静地坐在某个地方,等待GCC RTL的建造,等待链接?
我关注的GCC的特定口味是Mac OS X,Cygwin上的Xcode,以及Debian Linux Etch随附的Xcode。
解决方案 4
重新实现了更常见的WCS*函数的5-6,#DEDEDEDEDIND定义了我的实现。
其他提示
但是,是否有一个更优雅的选择 - 例如,与2字节WCHAR-T静静地坐在某个地方,等待连接的GCC RTL的建造?
否。这是一个特定于平台的问题,而不是海湾合作委员会问题。
也就是说,Linux平台ABI指定 wchar_t
宽32位,因此您必须使用一个全新的库(ICU是一个受欢迎的选择),或者将代码移植到处理4字节的代码 wchar_t
s。您可能链接到的所有库也将假设一个4字节 wchar_t
, , 和 将要 如果您使用GCC -fshort-wchar
.
但是,在Linux上,几乎每个人都在所有多型编码上都在UTF-8上标准化。
看着那(这 ICU库. 。它是带有UTF-16 API的便携式库。
正如您注意到的那样,WCHAR_T已定义。没有办法使用该数据类型。
通常,在整个UCS-2崩溃被宣布为一个不太好的想法之后,Linux Systems的优势是稍后获得Unicode支持,并将UTF-8用作编码。所有系统API仍在char*上运行,并且是Unicode安全的。
最好的赌注是使用为您管理的库:QT,ICU,等。
请注意,Cygwin具有2个字节WCHAR_T,以使Windows的网格划分更加容易。