Тильда в имени устройства вызывает проблемы с сокетом NSOutputStream - PullRequest
0 голосов
/ 25 марта 2010

В сети между версиями нашего приложения для iPhone и настольного компьютера iPhone отправляет имя устройства для использования на рабочем столе. Проблема в том, что некоторые из бета-тестеров имеют тильды (`) в именах своих устройств. По какой-то причине, когда это имя устройства, оно не позволяет сокету отправлять фактические строковые данные.

Я пытался просто очистить имя устройства перед отправкой, но тильда в имени устройства (как введено в iTunes) не распознается во время выполнения как тильда. Вот код, который не работает:

NSString *safedevicename = [[UIDevice currentDevice] name];
safedevicename = [safedevicename stringByReplacingOccurrencesOfString:@"`" withString:@"'"];

Не находит тильды и ничего не заменяет. Я также использовал rangeOfString для поиска тильд, и он ничего не возвращает. Я на 100% уверен, что персонаж, по крайней мере, так как он введен в iTunes, является тильдой.

Кроме того, при выводе описания строки на консоль символ кодируется как \u00b4, а при наведении курсора на переменную он отображается в виде периода ..

Кто-нибудь знает, как я могу схватить этого персонажа и вытащить его оттуда? Кроме того, разве в цели C нет способа упростить очистку строки, чтобы гарантировать ее безопасную отправку через сокет?

EDIT: Также кое-что, что может быть полезно, чтобы записать NSString в NSOutputString, я использую следующую строку кода:

len = [oStream write:[[writeString dataUsingEncoding:NSASCIIStringEncoding] bytes] maxLength:[writeString lengthOfBytesUsingEncoding:NSASCIIStringEncoding]];

РЕДАКТИРОВАТЬ # 2: Эта строка кода работает для замены тильды, но я уверен, что есть другие символы, о которых я должен беспокоиться:

safedevicename = [safedevicename stringByReplacingOccurrencesOfString:@"\\u00b4" withString:@"'"];

1 Ответ

0 голосов
/ 25 марта 2010

Комментарий Джейсона был правильным ответом: мне нужно было изменить кодировку с NSASCIIStringEncoding на NSUTF8StringEncoding.

...