0

我想以十六进制检索字符的 unicode 表示。例如,对于字符 €,该值应为 0x0080。我只需要为 ISO 8859-1 执行此操作,即 unicode 编码的前 256 个字符。因此,我在 C++ 中使用强制转换为 unsigned char 来执行此操作,如下所示:

(unsigned char) normal_character

这里, normal_character 是 char 类型。到目前为止,这已经奏效了,但是有什么我应该注意的警告吗?

谢谢!

编辑:

我以字符 € 为例。它不在 ISO 8859-1 字符集中。

4

2 回答 2

2

根据定义,ISO-8859-1 编码与 Unicode 表的前 256 个代码点相同。所以一个简单的数字转换就足够了。但是请注意,Unicode 代码点至少需要 32 位(实际上只有 21 位,但是...uint21_t通常不存在):

char ch_iso88591 = 'a';
uint32_t ch_unicode = (uint32_t)(unsigned char)ch_iso88591;

正如您在问题中正确指出的那样,由于签名unsigned char的可能性,您必须将其转换为。char

如果原始字符集不是 ISO-8859-1(当然是 ASCII),则需要使用表格。例如,Windows-1252 通常与 ISO-8859-1 混淆,但它们有些不同(请参阅您的 € 示例)。如果您有 Windows-1252,那么您确实需要一张桌子。这个表的构建其实很简单,你可以自己复制维基百科文章中的值(只需要0x80到0xFF之间的值),因为0x00-0x7F的范围是完全一样的)。

于 2013-01-08T09:25:28.253 回答
1
于 2013-01-08T09:00:55.317 回答