【发布时间】:2013-01-20 04:17:51
【问题描述】:
我的输入是 Unicode 字符,例如:“(U+00DB) (U+0081)” (wchar_t*)。我使用 wcstombs 将此宽字符字符串转换为 char * (MBCS)。由于 Unicode 已经以 UTF-8 编码,我希望它以 DB81 char* 形式返回逐字节复制的 Unicode 序列。但相反,我得到了 c3 9b。这发生在 Linux 和 Windows 上,我只得到“DB 81”。
我需要打开一个名为 DB 81 的文件(如 hexdump 所示),但 fopen 使用 char* 文件名。因此我必须将此 wchar_t* 转换为 MBCS。请帮忙!!
【问题讨论】:
-
“由于 Unicode 已经以 UTF-8 编码” - 在这种情况下并非如此。在任何平台上,
wchar_t*永远不会被编码为 UTF-8。wchar_t类型是 16 位或 32 位,具体取决于平台,因此编码为 UTF-16 或 UTF-32。转换为 MBCS 与转换为 UTF-8 不同,除非您使用的是 UTF-8 语言环境/代码页。如果您想将 UTF-16/UTF-32 转换为 UTF-8,您应该使用 ICONV、ICU 或其他 Unicode 库来为您完成。
标签: unicode