我有以下代码,代码中的注释表示它会将大于7F
的任何字符转换为UTF-8。我对此代码有以下问题:
if((const unsigned char)c > 0x7F)
{
Buffer[0] = 0xC0 | ((unsigned char)c >> 6);
Buffer[1] = 0x80 | ((unsigned char)c & 0x3F);
return Buffer;
}
Buffer
中放置的字符有影响吗?答案 0 :(得分:10)
对于初学者来说,代码通常不起作用。通过
巧合,它是如果 char
(或unsigned
char
)中的编码是ISO-8859-1,因为ISO-8859-1具有相同的代码
指向前256个Unicode代码点。但ISO-8859-1有
很大程度上被ISO-8859-15所取代,所以它可能不会
工作。 (例如,尝试使用0xA4。欧元登录
ISO-8859-15。它会给你一个完全不同的
性格。)
有两种正确的方法可以进行此转换,这两种方法都是如此
取决于知道输入字节的编码(哪个
意味着您可能需要多个版本的代码,具体取决于
关于编码)。最简单的就是拥有一个数组
256个字符串,每个字符一个,以及索引。其中
例如,您不需要if
。另一种是翻译
代码转换为Unicode代码点(32位UTF-32),并进行翻译
进入UTF-8(对于某些人来说可能需要两个以上的字节)
字符:欧元字符是0x20AC:0xE2,0x82,0xAC)。
编辑:
有关UTF-8的详细介绍: http://www.cl.cam.ac.uk/~mgk25/unicode.html。标题说 适用于Unix / Linux,但系统很少(如果有的话) 其中的具体信息(这些信息很清楚 标记)。