【问题标题】:Why Same Unicode Characters Have Different Integer Values and Vice-Versa?为什么相同的 Unicode 字符具有不同的整数值,反之亦然?
【发布时间】:2010-12-23 08:28:26
【问题描述】:

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

【问题讨论】:

    标签: objective-c c unicode


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      %c 是字符,%C 是 unicode 字符。我猜前面使用了一些 8 位编码,我猜 >255 的值被 256 取模,你总是得到一个 8 位字符。 unicode 字符始终打印您想要的字符值。

      还要注意,不同的 unicode 字符具有相同的外观。

      【讨论】:

      • 对不起,我没听明白。 “具有相同外观的不同 unicode 字符”是什么意思?获得唯一的 unicode 值也很重要,因为我将使用它来查找自定义字体的字形。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-27
      相关资源
      最近更新 更多