iOS UTF-8标签字符串
我有一个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。
好的,如果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 */