iOS UTF-8标签字符串

我有一个UTF-8编码字符串,我想在标签中显示。

当我设置一个断点并检查持有字符串的变量时,所有看起来都很好。 但是,当我尝试输出到日志或标签时,我得到拉丁编码。

Xcode截图

我已经尝试了几乎所有关于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。

好的,如果m_value是包含UTF-8字符串的const char,则必须使用此方法:

- (id)initWithUTF8String:(const char *)bytes

 NSString *correctString = [[NSString alloc] initWithUTF8String: m_value]; 

const char*传递给@ formatter是不正确的,因为@表示NSObject ,因此它总是不正确并且可能导致应用程序崩溃

所以我终于成功了。

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输出。

当我想在标签上显示高棉时,我使用字体’Hanuman.ttf’。 这是我使用的代码:

 `UIFont *font = [UIFont fontWithName:@"Hanuman" size:20.0f]; self.nameLabel.text = [NSString stringWithFormat:@"%@",itemName]; self.nameLabel.font = font;` 

设置字体

结果

我不知道这可以帮到你,但这就是我之前所做的!

考虑您的变量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 */