对于初学者来说,代码通常不起作用。巧合的是,如果char
(or ) 中的编码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,但其中几乎没有系统特定信息(如果有的话)(并且这些信息已明确标记)。