如何在 C++ 中将字符的十进制代码转换为 Unicode 字符串?

Posted

技术标签:

【中文标题】如何在 C++ 中将字符的十进制代码转换为 Unicode 字符串?【英文标题】:How can I convert a decimal code of a character into a Unicode string in C++? 【发布时间】:2010-01-30 20:22:35 【问题描述】:

例如,我给它一个整数 241,即 'ñ' 西班牙字母,我想将它转换为 Unicode 字符串。

【问题讨论】:

通常没有“unicode 字符串”这样的东西。您必须指定您希望字符串使用的编码,UTF-8 是最常见的。 在 UTF16LE 最常见的窗口中除外 @unwind:我不同意,“unicode”通常被理解为 UTF16,其中每个字符都是 16 位宽。当需要 UFT-8 编码时,会明确指定。 @unwind:如何指定编码? @JohnKnoeller: ""unicode" 通常被理解为 UTF16,其中每个字符都是 16 位宽。" 这在很多方面都是错误的。只有在 Windows 上,“unicode”通常表示 UTF-16。 Unicode 表示 Unicode,它是一种特定的国际标准,包括 UTF-16。 Unicode 是 UTF-16,就像编程是 C++。其次,UTF-16 意味着每个“字符”都是 16 位宽。代理对意味着许多字符都是 32 位宽的。您不能假设字符数是 UTF-16 字符串的长度。 【参考方案1】:

如果您的源字符集是 ISO 8859-1 或 8859-15(两者在代码点 0xF1 = 241 处都有带 TILDE 的拉丁小写字母 N),那么转换需要为 Unicode 字符 U+ 创建正确的编码00F1.

现在,我们需要知道您使用的是哪种 Unicode 编码方案。如果您使用 UTF-8,您将需要结果:

 \xC3 \xB1

如果您使用 UTF-16 BE(大端),您需要:

\x00 \xF1

如果您使用 UTF-16 LE(小端序),您需要:

\xF1 \x00

如果您使用的是 UTF-32,那么您需要 4 个字节而不是 2 个。

如果你想要一个字符串,你需要将 U+0000 (NULL) 编码为以下字符。

如果你不知道你需要哪种形式,那你就有大问题了;要使用 Unicode,您需要了解不同形式的编码方式。您的库可能会让您免于理解很多麻烦,但最终,您至少需要知道一个 minimum about Unicode。

【讨论】:

【参考方案2】:

如果字符代码是在运行时确定的,而你不能使用像explained by Jonathan 这样的字面量,你需要依赖你的工具包。例如,在 Qt 中:

QString codepointToString(QString codepointDecimal) 
    int codepoint = codepointDecimal.toInt(); //TODO: check errors
    QChar character(codepoint);
    return QString(character);

【讨论】:

以上是关于如何在 C++ 中将字符的十进制代码转换为 Unicode 字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中将十六进制字符串转换为字节字符串? [复制]

如何在 Visual C++ 中将字节数组转换为十六进制字符串?

如何在 C++ 中将字节数组转换为十六进制字符串?

在 C++ 中将十六进制字符转换为 int

在 C++ 中将十六进制字符串转换为字节数组

在c ++中将负整数转换为二进制字符串