В сети между 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:@"'"];
Во-первых, персонаж - серьезный акцент, а не тильда. Тильда - ~. Во-вторых, я думаю, что вы неправильно кодируете. Какой бы символ у вас ни был, B4 не может быть частью кодировки символов ASCII. Самый высокий символ ASCII - 7F. Тильда 7E, а серьезный акцент - 60. Сокеты представляют собой поток двоичных данных, поэтому все «безопасно». Попробуйте отправить кодированные строки UTF-8 вместо строк, закодированных в ASCII. –
Ничего себе полный перфект мозга на имя персонажа. Думаю, мне нужно вернуться в испанский класс. Я пробовал другие персонажи (ñ, é), и все они вызывают одну и ту же проблему. – mjdth
Также я попробую NSUTF8Encoding и посмотрю, как это работает. Спасибо за совет. – mjdth