在iPhone上进行debugging时,NSLog输出unicode字符为乱码

编辑: NSLog输出在模拟器中工作良好,但连接到真实设备时不起作用。 它似乎是一个错误 – http://openradar.appspot.com/11148883 。 另外碰巧与LLDB有关,将Xcode切换到GDB可以解决问题。 JetBrain的AppCode可以和LLDB配合使用。


我在应用程序中有一堆unicodestring,如果我尝试使用类似NSLog(@“%@”,aString)输出任何这些string,那么string中的所有ASCII字符将被打印正确,但所有的西里尔信件会被搞乱,所以不是

newLocation: coordinate:60.019584,30.284954 'Удельная' 

我越来越:

 newLocation: coordinate:60.019584,30.284954 '–ü–æ–∫–ª–æ–Ω–Ω–æ–≥–æ—Ä—Å–∫–∞—è' 

这样的输出很难做任何debugging。 而且因为这个应用程序是针对俄罗斯市场的,所以我不能只改变语言环境和使用英文string。

所以我想知道是否有任何办法使NSLog工作与unicode字符? 我只是在寻找某种单线解决scheme ,我知道有一些方法可以写半页的代码并输出unicode字符,但是我正在寻找更短的东西。 理想情况下,我正在寻找一些NSString的方法,这将使所有的工作。 例如

 NSLog(@"%@", [aString someThingThatMakesUnicodeWorkWithXcodeConsole]); 

据我所知,它与一些Xcode版本的NSLog()和LLDB有关。 试试这些解决scheme之一:

  • 检查loginXcodepipe理器>>设备>>您的设备>>控制台。
  • 如果您使用的是后者,则使用GDB作为debugging器而不是LLDB。 这可以从架构选项中更改。 请参阅下面“cocos2d man”的评论中的步骤。
  • 升级到Xcode 4.3.2。 有人说这个问题解决了,但是我自己也没有证实。

是的,显然你可以创build一个包含和输出西里尔字母的string。 当我学习Objective-C的时候,我在开始时遇到了同样的问题(我还在用俄语和其他类似的东西)。 所以解决scheme是将string转换为其他格式,如下所示:

 NSString *string = [NSString stringWithCString:"Привет, как дела?" encoding:4]; NSLog(@"%@", string); 

要么

 NSString *string = [NSString stringWithUTF8String:"Этот вариант короче!"]; NSLog(@"%@", string); 

希望它可以帮助你!

PS这意味着你需要创build你的string作为C风格的string,并将其编码参数设置为4(UTF-8)。 您可以在NSString中的NSStringEncoding中看到文档中的所有可用参数列表。

尝试将其转换为UTF8string。

 NSString *str = [aString UTF8String] NSLog(@"%@", str); 

希望这可以帮助。

尝试把它像NSLog(@"%@", aString);

编辑:

你可以把它转换成UTF8string。 这可以让你通过。

 NSString *str = [aString UTF8String]; 

希望这可以帮助。

尝试这个。 这个对我有用。

 NSLog(@"%@", [NSString stringWithCString:[[places description] cStringUsingEncoding:NSASCIIStringEncoding] encoding:NSNonLossyASCIIStringEncoding]);