Строковое кодирование скандинавского письма от url до utf8 для const char на iphone - PullRequest
0 голосов
/ 29 января 2010
NSString *theString = @"a %C3%B8 b";

NSLog(@"%@", theString);

NSString *utf8string = [theString stringByReplacingPercentEscapesUsingEncoding: NSUTF8StringEncoding]

NSLog(@"%@", utf8string);

const char *theChar = [utf8string UTF8String];

NSLog(@"%s", theChar);

Это регистрирует следующее:

'a% C3% B8 b'

'a ø b'

'a √∏ b'

Проблема в том, что я хочу, чтобы theCar был 'a ø b'. Буду признателен за любую помощь в достижении этого.

Ответы [ 3 ]

1 голос
/ 29 января 2010

Не думаю, что ты можешь. char является восьмибитным типом, поэтому все значения находятся в диапазоне 0-255. В UTF8 ø не кодируется в этом диапазоне.

Возможно, вы захотите взглянуть на тип Unicode, который является 16-битным типом. Это может удерживать ø как один элемент и использовать getCharacters: range: для вывода символов из строки NSString

0 голосов
/ 29 января 2010

Я хотел бы добавить, что ваш theChar содержит содержит последовательность байтов UTF8 желаемой строки. Проблема NSLog("%s") в том, что он не может правильно отобразить строку в файле журнала и / или консоли.

Итак, если вы хотите передать последовательность байтов UTF8 в char* в какую-то другую библиотеку, то, что вы сделали, совершенно правильно.

0 голосов
/ 29 января 2010

С Спецификаторы формата строки в Руководстве по программированию строки:

% s : 8-битный массив с нулевым символом в конце неподписанные символы. % s интерпретирует его вход в систему кодировки скорее чем, например, UTF-8.

Итак, NSLog(@"%s", theChar) создает и отображает объект NSString с неправильной кодировкой, а сам theChar содержит правильные строковые данные.

NSLog([NSString stringWithUTF8String:theChar]);

Дает правильный вывод. (a ø b)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...