我想以十六进制检索字符的 unicode 表示。例如,对于字符 €,该值应为 0x0080。我只需要为 ISO 8859-1(unicode 编码的前 256 个字符)执行此操作。所以我在 C++ 中使用转换为 unsigned char 来执行此操作,如下所示:
(unsigned char) normal_character
这里normal_character是char类型。 到目前为止,这是有效的,但是有什么我应该注意的警告吗?
谢谢!
编辑:
我以字符 € 为例。它不在 ISO 8859-1 字符集中。
最佳答案
根据定义,ISO-8859-1 编码与 Unicode 表的前 256 个代码点相同。所以一个简单的数字转换就足够了。但是请注意,Unicode 代码点至少需要 32 位(实际上只有 21 位,但是...... uint21_t
通常不存在):
char ch_iso88591 = 'a';
uint32_t ch_unicode = (uint32_t)(unsigned char)ch_iso88591;
正如您在问题中正确指出的那样,由于 char
被签名的可能性,您必须将其转换为 unsigned char
。
如果原始字符集不是 ISO-8859-1(当然是 ASCII),则需要使用表格。例如,Windows-1252 通常与 ISO-8859-1 混淆,但它们有些不同(请参阅您的 € 示例)。如果您有 Windows-1252,那么您确实需要一张表。这个表其实很简单,你可以自己从Wikipedia article中复制值。 (只需要从 0x80 到 0xFF 的值),因为 0x00-0x7F 范围完全相同。
关于C++ 以十六进制检索 Unicode 代码点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14210870/