【发布时间】:2012-10-03 15:39:44
【问题描述】:
在 Linux 上使用 wchar_t* 存储 UTF-16 编码的文本是否有意义?明显的问题是wchar_t 在 Linux 上是四个字节,而 UTF-16 通常每个字符占用两个(或有时两组两个)字节。
我正在尝试使用完全可以做到这一点的第三方库,这似乎很令人困惑。看起来事情搞砸了,因为在 Windows 上 wchar_t 是两个字节,但我只是想仔细检查一下,因为它是一个非常昂贵的商业库,可能我只是不明白。
【问题讨论】:
-
您可以将 2 字节长的值存储在 4 字节长的变量中...
-
我认为你需要阅读和理解this
-
有理由不使用
uint16_t来表示UTF-16 代码单元吗? -
wchar_t 字符串应该使用实现定义的宽字符编码。如果您的代码假定编码不是它的东西(例如,Linux 上的 UTF-16),那么当该代码尝试与其他正确处理 wchar_t 的代码互操作时可能会出现问题。例如,iconv 无法在 UTF-16-in-4-byte-wchar_t 和 UTF-8 之间正确转换。
-
如果你想编写可移植的代码,我认为你应该好好看看utf8everywhere.org。
标签: c linux unicode utf-16 wchar-t