Pas*_*Kit 5 objective-c utf-8 ios
我有一个UTF-8编码字符串,我想在标签中显示.
当我设置一个断点并检查持有字符串的变量时,所有看起来都很好.但是,当我尝试输出到日志或标签时,我得到拉丁编码.

我已经尝试了几乎所有关于SO及其他的建议,但我无法正确显示字符串.
这是我的代码:
NSString *rawString = [NSString stringWithFormat:@"%@",m_value];
const char *utf8String = [rawString UTF8String];
NSLog (@"%@", [NSString stringWithUTF8String:utf8String]);
NSLog (@"%s", utf8String);
NSLog (@"%@", rawString);
self.resultText.text = [NSString stringWithUTF8String:utf8String];
Run Code Online (Sandbox Code Playgroud)
m_value是一个NSString,在调试窗口中,它还显示正确的编码.
m_value NSString * 0x006797b0 @"???..."
NSObject NSObject
isa Class 0x3bddd8f4
[0] Class
Run Code Online (Sandbox Code Playgroud)
我正在使用iOS 6.1 SDK.
所以我终于弄清楚了这件事的真相。
这m_value NSString是由第三方库设置的,我无法访问源代码。尽管该变量的值在调试面板中(即显示中文字符)被正确解码,但该字符串实际上是用NSMacOSRomanStringEncoding.
我能够通过将输出复制到TextWrangler并翻转编码直到找到正确转换为 UTF-8 的编码来确定这一点。
然后为了在 Objective-C 中修复,我首先将 翻译NSString为 a const char:
const char *macString = [bxr.m_value cStringUsingEncoding:NSMacOSRomanStringEncoding];
Run Code Online (Sandbox Code Playgroud)
然后转换回NSString:
NSString *utf8String = [[NSString alloc]initWithCString:macString encoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)
+1 @Vitaly_S 和 @iphonic 他们的答案最终让我找到了这个解决方案。对于任何其他偶然发现这一点的人;似乎从 Xcode 4.6.1 开始,不能相信调试窗口能够正确渲染字符串,但您可以依赖输出NSLog。
| 归档时间: |
|
| 查看次数: |
7522 次 |
| 最近记录: |