【问题标题】:use wcstombs() to convert wchar_t* (containing Unicode) to MBCS (char*) dependent on locale使用 wcstombs() 将 wchar_t*(包含 Unicode)转换为 MBCS(char*),具体取决于语言环境
【发布时间】: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


【解决方案1】:

不,你想做的不是你认为应该做的。

fopen(),在任何情况下 - 都无法处理系统上所有可能的文件名,因为它缺乏 unicode 支持。

请参考http://www.utf8everywhere.org 了解如何使用_wfopen()。

【讨论】:

    猜你喜欢
    • 2016-07-05
    • 2016-05-02
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-09
    • 1970-01-01
    相关资源
    最近更新 更多