代码之家  ›  专栏  ›  技术社区  ›  Paweł Hajdan

如何在Windows的wchar_t和GCC/Linux之间进行转换(不一定是编程转换)?

  •  4
  • Paweł Hajdan  · 技术社区  · 16 年前

    假设我有这个Windows wchar_t字符串:

    L"\x4f60\x597d"
    

    L"\x00e4\x00a0\x597d"
    

    并希望将其转换为GCC/Linux wchar_t格式(不一定是编程方式;这将是一次性的),即UTF-32 AFAIK。我该怎么做?(一般性的解释会很好,但基于这个具体案例的例子也会有所帮助)

    请不要引导我到字符转换网站。我想从L“\x(something)”形式转换,而不是“end character”形式。

    4 回复  |  直到 8 年前
        1
  •  2
  •   Head Geek    16 年前

    将从UTF-16(Visual C++ wchar_t 格式)转换为UTF-8,然后可能从UTF-8转换为UCS-4(GCC wchar_t 表格),这是一个可以接受的答案吗?

    如果是这样,那么在Windows中,您可以使用 WideCharToMultiByte 功能(与 CP_UTF8 对于 CodePage 参数),用于转换的第一部分。然后,您可以将生成的UTF-8字符串直接粘贴到程序中,也可以进一步转换它们。 Here 是一条显示一个人是如何做到的信息;您还可以编写自己的代码或手动执行(可以找到官方规范,其中有一节详细介绍了如何将UTF-8转换为UCS-4 here ).可能有一种更简单的方法,我还不太熟悉Linux中的转换内容。

        2
  •  2
  •   Ignacio Vazquez-Abrams    16 年前

    你只需要担心角色 between \xD800 and \xDFFF inclusive 。当填充零时,从UTF-16到UCS-4的每个其他字符都应该完全相同。

        3
  •  0
  •   lothar    16 年前

    ICU库是进行字符转换最常用的库之一 http://icu-project.org/ 例如,它被一些增压器使用 http://www.boost.org/ 图书馆。

        4
  •  0
  •   Mihai Nita    16 年前

    伊格纳西奥说得对,如果你不使用一些罕见的汉字(或一些已经灭绝的文字),那么映射就是一对一的。(官方的“行话”是“如果你没有BMP以外的字符”)

    这是算法,以防万一: http://unicode.org/faq/utf_bom.html#utf16-3 但同样,很可能对你的真实情况毫无用处。

    您还可以使用Unicode的免费资源( ftp://ftp.unicode.org/Public/PROGRAMS/CVTUTF )