将视觉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_ts。您可能链接到的所有库也将假设一个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的网格划分更加容易。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top