Почему одни и те же символы Unicode имеют разные целочисленные значения и наоборот? - PullRequest
2 голосов
/ 23 декабря 2010

Я пытаюсь прочитать файл в 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 ]

3 голосов
/ 23 декабря 2010

Для спецификатора формата %c требуется значение байта (char).Вы передаете большие целые числа, поэтому это приводит к неопределенному поведению.Кроме того, похоже, что вы используете какую-то устаревшую 8-битную локали кодовой страницы, а не UTF-8, поэтому 8-битные байты имеют индивидуальные идентификаторы как символы, которые не соответствуют Unicode.Короче, у тебя много чего сломано.

0 голосов
/ 23 декабря 2010

% c - символ,% C - символ Юникода.Я предполагаю, что предыдущий использует некоторую 8-битную кодировку, я предполагаю, что> 255 значений делаются по модулю на 256, и вы всегда получаете 8-битный символ.Символ Unicode всегда печатает требуемое значение символа.

Также обратите внимание, что существуют разные символы Unicode с одинаковым внешним видом.

...