我有一个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];
m_value是一个NSString,在调试窗口中,它还显示正确的编码。
m_value NSString * 0x006797b0 @"鄧樂愚..."
NSObject NSObject
isa Class 0x3bddd8f4
[0] Class
我正在使用iOS 6.1 SDK。
答案 0 :(得分:4)
好的,如果m_value
是包含UTF-8字符串的const char,则必须使用此方法:
- (id)initWithUTF8String:(const char *)bytes
NSString *correctString = [[NSString alloc] initWithUTF8String: m_value];
将const char*
传递给@
格式化程序是不正确的,因为@
表示NSObject
,因此它总是不正确并且可能导致应用崩溃
答案 1 :(得分:4)
当我想在标签上显示高棉时,我使用字体'Hanuman.ttf'。这是我使用的代码:
`UIFont *font = [UIFont fontWithName:@"Hanuman" size:20.0f];
self.nameLabel.text = [NSString stringWithFormat:@"%@",itemName];
self.nameLabel.font = font;`
我不知道这可以帮到你,但这就是我之前所做的!
答案 2 :(得分:3)
所以我终于成功了。
m_value
NSString
由第三方库设置,我无权访问该来源。即使在调试面板中(即显示中文字符)中正确解码了此变量的值,该字符串实际上也是用NSMacOSRomanStringEncoding
编码的。
我能够通过将输出复制到TextWrangler并翻转编码直到找到正确转换为UTF-8的编码来确定这一点。
然后要修复Objective-C,我首先将NSString
翻译为const char
:
const char *macString = [bxr.m_value cStringUsingEncoding:NSMacOSRomanStringEncoding];
然后转换回NSString
:
NSString *utf8String = [[NSString alloc]initWithCString:macString encoding:NSUTF8StringEncoding];
+1 @Vitaly_S和@iphonic,他们的答案最终促成了我的解决方案。对于其他任何偶然发现的人;似乎从Xcode 4.6.1开始,调试窗口无法被信任以正确呈现字符串,但您可以依赖NSLog
输出。
答案 3 :(得分:1)
考虑您的变量 m_value NSData,您可以尝试以下
self.resultText.text = [[NSString alloc] initWithData:m_value encoding:NSISOLatin1StringEncoding];
您可以尝试使用许多编码
NSASCIIStringEncoding /* 0..127 only */
NSNEXTSTEPStringEncoding
NSJapaneseEUCStringEncoding
NSUTF8StringEncoding
NSISOLatin1StringEncoding
NSSymbolStringEncoding
NSNonLossyASCIIStringEncoding
NSShiftJISStringEncoding /* kCFStringEncodingDOSJapanese */
NSISOLatin2StringEncoding
NSUnicodeStringEncoding
NSWindowsCP1251StringEncoding /* Cyrillic; same as AdobeStandardCyrillic */
NSWindowsCP1252StringEncoding /* WinLatin1 */
NSWindowsCP1253StringEncoding /* Greek */
NSWindowsCP1254StringEncoding /* Turkish */
NSWindowsCP1250StringEncoding /* WinLatin2 */
NSISO2022JPStringEncoding /* ISO 2022 Japanese encoding for e-mail */
NSMacOSRomanStringEncoding
NSUTF16StringEncoding /* An alias for NSUnicodeStringEncoding */
NSUTF16BigEndianStringEncoding /* NSUTF16StringEncoding encoding with explicit endianness specified */
NSUTF16LittleEndianStringEncoding /* NSUTF16StringEncoding encoding with explicit endianness specified */
NSUTF32StringEncoding
NSUTF32BigEndianStringEncoding /* NSUTF32StringEncoding encoding with explicit endianness specified */
NSUTF32LittleEndianStringEncoding /* NSUTF32StringEncoding encoding with explicit endianness specified */