为什么相同的Unicode字符具有不同的整数值和副Versa?

时间:2010-12-23 08:28:27

标签: objective-c c unicode

我正在尝试在xcode中读取包含Unicode字符串的文件。我的代码将遍历字符串,逐个拾取字符并打印其对应的int值。 下面是读取其中一小部分的代码。

NSString *theText = @"˘¸";  
for(int i=0; i<[theText length]; i++) {  
        int k= 249+(i*3);  
        NSLog(@"%c and %C >> UNICODE DEC-VAL >> %d",[theText characterAtIndex:i],[theText characterAtIndex:i],[theText characterAtIndex:i]);  
        NSLog(@"%c and %C >> UNICODE DEC-VAL >> %d",k,k,k);  
}

,结果是:

 ÿ and ˘ >> UNICODE DEC-VAL >> 728  
 ˘ and ù >> UNICODE DEC-VAL >> 249  
 ∏ and ¸ >> UNICODE DEC-VAL >> 184  
 ¸ and ü >> UNICODE DEC-VAL >> 252

很明显存在歧义,因为相同的整数值字符根据格式说明符而不同,并且对于相同的unicode字符,它们的整数值也不同。 我很想知道为什么会这样? 感谢。

2 个答案:

答案 0 :(得分:3)

%c格式说明符需要一个字节(char)值。您传递的是更大的整数,因此会导致未定义的行为。除此之外,看起来您正在使用一些传统的8位代码页区域设置,而不是UTF-8,因此8位字节具有单独的标识作为与Unicode不匹配的字符。简而言之,你有很多事情要破。

答案 1 :(得分:0)

%c是字符,%C是unicode字符。我猜测之前使用的是一些8位编码,我猜测&gt; 255个值是256的模数,你总是得到一个8位字符。 unicode字符始终打印您想要的字符值。

另请注意,有不同的unicode字符具有相同的外观。