objective-c - 为什么相同的 Unicode 字符具有不同的整数值,反之亦然?

标签 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 字符,它们的整数值也不同。 我只是想知道为什么会这样?
谢谢。

最佳答案

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

关于objective-c - 为什么相同的 Unicode 字符具有不同的整数值,反之亦然?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4516999/

相关文章:

c++ - 读取 C 中的二进制 (.hgt) 文件(将代码从 C++ 迁移到 C)

python - python3中的UnicodeEncodeError

python - 在 UnicodeError 上显示字符串

ios - Objective-C:在选择时设置另一个 UITableViewCell

iphone - iOS 6 自动旋转的问题

c - 如何在C中读取带空格的整行文本

mysql - MariaDB/MySQL 中 utf8mb4_unicode_ci 和 utf8mb4_unicode_520_ci 排序规则的区别?

ios - UITextView 在旋转时保持文本位置

ios - NSCFConstantString objectAtIndex : error in grouped table

c - 无法递归访问子文件夹