2010-03-25 1 views
0

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

Я попробовал просто очистить имя устройства перед его отправкой, но тильда в имени устройства (как указано в 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]]; 

EDIT # 2: Эта строка кода работает, чтобы заменить тильды , но я уверен, что есть и другие персонажи, я должен беспокоиться о:

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

Во-первых, персонаж - серьезный акцент, а не тильда. Тильда - ~. Во-вторых, я думаю, что вы неправильно кодируете. Какой бы символ у вас ни был, B4 не может быть частью кодировки символов ASCII. Самый высокий символ ASCII - 7F. Тильда 7E, а серьезный акцент - 60. Сокеты представляют собой поток двоичных данных, поэтому все «безопасно». Попробуйте отправить кодированные строки UTF-8 вместо строк, закодированных в ASCII. –

+0

Ничего себе полный перфект мозга на имя персонажа. Думаю, мне нужно вернуться в испанский класс. Я пробовал другие персонажи (ñ, é), и все они вызывают одну и ту же проблему. – mjdth

+0

Также я попробую NSUTF8Encoding и посмотрю, как это работает. Спасибо за совет. – mjdth

ответ

0

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