4

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

L"\x4f60\x597d"

L"\x00e4\x00a0\x597d"

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

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

4

4 回答 4

2

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

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

于 2008-10-25T15:28:19.320 回答
2

您只需要担心\xD800 和 \xDFFF inclusive 之间的字符。填充零时,其他所有字符都应从 UTF-16 映射到 UCS-4 完全相同。

于 2008-10-26T06:43:04.800 回答
0

最常用的字符转换库之一是 ICU 库http://icu-project.org/它被一些 boost http://www.boost.org/库使用。

于 2008-12-08T23:10:18.697 回答
0

伊格纳西奥是对的,如果你不使用一些稀有的汉字(或者一些绝迹的文字),那么映射是一对一的。(官方的“行话”是“如果你没有 BMP 之外的字符”)

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

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

于 2009-07-24T08:53:04.030 回答