【问题标题】:How can I convert from ANSI character (char) to Unicode character (wchar_t) and vice versa?如何从 ANSI 字符 (char) 转换为 Unicode 字符 (wchar_t),反之亦然?
【发布时间】:2011-11-12 02:13:33
【问题描述】:

如何将 ANSI 字符 (char) 转换为 Unicode 字符 (wchar_t),反之亦然?

有没有为此目的的跨平台源代码?

【问题讨论】:

    标签: c++ char wchar-t


    【解决方案1】:

    是的,在<cstdlib> 中有mbstowcs()wcstombs()

    我之前曾在some code 上发布过如何使用它,也许这会有所帮助。确保您运行该函数两次,一次获取长度,一次进行实际转换。 (这里有一点 discussion 函数的含义。)我可能更喜欢 std::vector<char>std::vector<wchar_t>,而不是手动 char 数组。

    请注意,wchar_t 与 Unicode 无关。如果需要 Unicode,则需要使用单独的库(如 iconv())进一步从 wchar_t 转换为 Unicode,并且不要使用 wchar_t 作为 Unicode 代码点的数据类型。相反,在旧系统上使用 uint32_t 或在现代系统上使用 char32_t

    【讨论】:

    • 谢谢,但是这些函数是用于字符串转换的。
    • 对于单个字符,有一个等效的 mbtowc()wctomb()
    • @Amir 您可以使用它们将一个字符长度的字符串转换为另一个字符长度的字符串并提取字符。
    • 如果不是字符串,16 位 wchar_t 如何转换为 8 而不是 char?
    【解决方案2】:

    如果您真的使用 Unicode 而不仅仅是 16 位字符,请查看 ICUiconv 等库。也就是说,Unicode 不仅仅处理单个字符,甚至不像普通 wchar_t 那样处理 16 位字符。

    【讨论】:

      【解决方案3】:

      显然这行得通,我不知道它是否会一直有效还是巧合,但我认为值得展示:

      const char* c = "hey yo";
      wstring s(c, c + 6);
      
      wcout << s << endl;
      wcin.get();
      

      打印

      hey yo
      

      【讨论】:

        猜你喜欢
        • 2014-01-23
        • 1970-01-01
        • 1970-01-01
        • 2011-05-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多