尽管wchar_t
在不同编译器上的支持不一致,但是是否可以安全地假设wchar_t
的实现和大小在GNU / GCC中至少在Linux上相似?
尽管wchar_t
大小在位大小(32位/ 64位)方面具有系统体系结构依赖性,但Linux上的宽字符类型(GNU / GCC)实际上是编译器依赖性还是libstdc++库依赖性?我的意思是说,通过更改或升级,我应该考虑到wchar_t
在大小和支持方面可能无法按预期工作
尽管IBM ICU是另一种选择,但它可以与std::string
结合使用吗?
我应该完全弃用wchar_t
而不是ICU吗?
注意:在Unix之类的操作系统(例如带有GNU / GCC的Linux)上,libstdc++为编译器带来了核心C++功能,因此有时会进行更新。
最佳答案
如果要向用户显示字符串,则可能必须考虑wchar_t
(或其他一些库定义的类型)。不同的编译器和平台对wchar_t
的定义不同,因为它们使用不同的Unicode编码技术。例如,在Windows / Visual C++上,wchar_t
是16位类型,适用于UTF-16。例如,在GCC / Linux上,wchar_t
是32位类型,适用于UTF-32。
IBM ICU库具有用于从一种编码转换为另一种编码的转换功能。您的平台(例如Win32)可能还具有将一种编码转换为另一种编码的功能。
根据您的要求(速度,内存使用情况),您应该选择适合该平台的内部格式。在Windows上可能是UTF-16,在Linux上可能是UTF-32。这样,您就不必一直对字符串进行转码,只需对它们进行简单的平台定义的操作(wcslen()
,wcscmp()
等)。
对于外部格式(文本文件等),我倾向于使用UTF-8。原因是如果文件包含西方语言的文本,则文件会小得多。另一个好处是,您不必考虑UTF-8的固有性,这减少了(您或他人)出错的可能性。
IBM ICU是一个非常强大的库,用于处理Unicode字符串。虽然,它可能使用大铁锤打入小钉子。您需要其所有功能吗?目标平台支持的Unicode功能可能满足您的要求。
关于c++ - wchar_t与C++中ICU的Unicode不一致,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4507222/