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]);