我正在尝试读取一个包含Unicode字符串的xcode文件,characters.My代码将遍历字符串,一个接一个地提取字符,并打印其相应的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字符,它们的整数值也不同,这显然是有歧义的。我很好奇,为什么会这样呢?
谢谢。
发布于 2010-12-23 13:16:10
%c
格式说明符需要字节(char
)值。您传递的是较大的整数,因此会导致未定义的行为。除此之外,看起来您使用的是一些传统的8位代码页区域设置,而不是UTF-8,因此8位字节具有与Unicode不匹配的字符标识。简而言之,你有很多东西坏了。
发布于 2010-12-23 08:39:41
%c是字符,%C是unicode字符。我猜前面使用了一些8位编码,我猜大于255的值被256取模,你总是得到一个8位字符。unicode字符始终打印所需的字符值。
另请注意,存在具有相同外观的不同unicode字符。
https://stackoverflow.com/questions/4516999
复制相似问题