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

L"\x4f60\x597d"

L"\x00e4\x00a0\x597d"

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

请不要将我指向角色转换网站。我想转换自L" \ x(something)"形式而不是“结束字符”形式。

有帮助吗?

解决方案

最常用的字符转换库是ICU库 http://icu-project.org/ 就是这样的一些提升 http://www.boost.org/ 图书馆使用。

其他提示

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

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

您只需要担心在\ xD800和\ xDFFF之间。当零填充时,每个其他字符应该从UTF-16到UCS-4完全相同。

Ignacio是对的,如果你不使用一些罕见的中文字符(或一些已经灭绝的脚本),那么映射是一对一的。 (官方的“行话”是“如果您没有BMP以外的字符”)

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

您还可以使用Unicode中的免费资源( ftp://ftp.unicode.org /公共/计划/ CVTUTF

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top