NSLog выводит символы Unicode как мусор при отладке на iPhone
EDIT: Выход NSLog хорошо работает в симуляторе, но не работает при подключении к реальному устройству. И кажется, что это ошибка - http://openradar.appspot.com/11148883. Также бывает, что это связано с LLDB, переключение Xcode на GDB решает проблему. Либо это возможно для JetBrain AppCode, который хорошо работает с LLDB.
У меня есть куча строк unicode в приложении, и если я попытаюсь вывести любую из этих строк, используя что-то вроде NSLog (@ "% @", aString), тогда все символы ASCII в строка будет напечатана штрафом, но все кириллические буквы будут испорчены, поэтому вместо
newLocation: coordinate:60.019584,30.284954 'Удельная'
Я получаю:
newLocation: coordinate:60.019584,30.284954 '–ü–æ–∫–ª–æ–Ω–Ω–æ–≥–æ—Ä—Å–∫–∞—è'
И это довольно сложно сделать для отладки с таким типом вывода. И поскольку это приложение предназначено только для российского рынка, я не могу просто изменить язык и использовать английские строки.
Итак, я задаюсь вопросом, есть ли способ заставить NSLog работать с символами Unicode? И я ищу только какое-то однострочное решение. Я знаю, что есть несколько способов написать половину страницы кода и выводить символы юникода, но я ищу что-то более короткое. В идеале я ищу какой-то метод NSString, который заставит все это работать. например.
NSLog(@"%@", [aString someThingThatMakesUnicodeWorkWithXcodeConsole]);
Ответы
Ответ 1
Насколько я знаю, это относится к NSLog() и LLDB для некоторых версий Xcode. Попробуйте одно из следующих решений:
- Проверить журнал в Xcode Organizer → Устройства → ваше устройство → Консоль.
- Используйте GDB как ваш отладчик вместо LLDB, если вы используете последний. Это можно изменить из параметров схемы. Пожалуйста, ознакомьтесь с инструкциями в комментарии "cocos2d man" ниже.
- Обновление до Xcode 4.3.2. Некоторые люди говорят, что решили эту проблему, но я не подтвердил это сам.
Ответ 2
Да, очевидно, вы можете создать строку, которая будет содержать и выводить кириллические буквы. Когда я учился Objective-C, у меня была такая же проблема в начале (я тоже работал с русскими словами и тому подобное). Поэтому решение состоит в том, чтобы преобразовать строку в другой формат следующим образом:
NSString *string = [NSString stringWithCString:"Привет, как дела?" encoding:4];
NSLog(@"%@", string);
или
NSString *string = [NSString stringWithUTF8String:"Этот вариант короче!"];
NSLog(@"%@", string);
Надеюсь, это поможет вам!
P.S Это означает, что вам нужно создать свои строки как строки C-Style и установить их параметр кодирования 4 (UTF-8). Вы можете увидеть весь список доступных параметров в документации для NSStringEncoding в NSString.
Ответ 3
Попробуйте поместить его как NSLog(@"%@", aString);
EDIT:
вы можете преобразовать его в строку UTF8. Это может помочь вам.
NSString *str = [aString UTF8String];
Надеюсь, что это поможет.
Ответ 4
Попробуйте преобразовать его в строку UTF8.
NSString *str = [aString UTF8String]
NSLog(@"%@", str);
Надеюсь, что это поможет.
Ответ 5
Попробуйте это. Это работает для меня.
NSLog(@"%@", [NSString stringWithCString:[[places description] cStringUsingEncoding:NSASCIIStringEncoding] encoding:NSNonLossyASCIIStringEncoding]);