在将我的Visual C++项目移植到GCC时,我发现默认情况下wchar_t数据类型是4字节UTF-32。我可以用编译器选项覆盖它,但是整个wcs* (wcslen、wcscmp等)RTL的一部分无法使用,因为它采用了4字节宽的字符串。
到目前为止,我已经从头开始重新实现了其中的5-6个函数,并在#中定义了我的实现。但是,有没有一个更优雅的选择-比方说,构建一个带有2字节wchar-t的GCC RTL,静静地坐在某个地方,等待被链接?
我想要的是Mac上的Xcode,Cygwin,以及Debian Linux Etch自带的那个,这些都是我想要的。
发布于 2010-10-12 11:41:56
重新实现了5-6个更常见的wcs*函数,#在中定义了我的实现。
发布于 2010-05-08 01:59:39
但是有没有一个更优雅的选择-比方说,构建一个带有2字节wchar-t的GCC RTL,静静地坐在某个地方,等待被链接?
不是的。这是一个特定平台的问题,不是GCC的问题。
也就是说,Linux平台ABI指定wchar_t
是32位宽的,所以要么你必须使用一个全新的库( ICU是一个流行的选择),要么移植你的代码来处理4字节的wchar_t
。所有你可能链接到的库也将假定为4字节的wchar_t
,如果你使用的是GCC的-fshort-wchar
,就会崩溃。
但特别是在Linux上,几乎每个人都为所有多字节编码制定了UTF-8标准。
发布于 2010-05-08 01:31:39
看看ICU library。它是一个带有UTF-16API的可移植库。
https://stackoverflow.com/questions/2790412
复制相似问题