我正在尝试在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字符,它们的整数值也不同。 我很想知道为什么会这样? 感谢。
答案 0 :(得分:3)
%c
格式说明符需要一个字节(char
)值。您传递的是更大的整数,因此会导致未定义的行为。除此之外,看起来您正在使用一些传统的8位代码页区域设置,而不是UTF-8,因此8位字节具有单独的标识作为与Unicode不匹配的字符。简而言之,你有很多事情要破。
答案 1 :(得分:0)
%c是字符,%C是unicode字符。我猜测之前使用的是一些8位编码,我猜测&gt; 255个值是256的模数,你总是得到一个8位字符。 unicode字符始终打印您想要的字符值。
另请注意,有不同的unicode字符具有相同的外观。