[英]iOS UTF-8 Label String
我有一個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
,因此它總是不正確並且可能導致應用程序崩潰
當我想在標簽上顯示高棉時,我使用字體'Hanuman.ttf'。 這是我使用的代碼:
`UIFont *font = [UIFont fontWithName:@"Hanuman" size:20.0f];
self.nameLabel.text = [NSString stringWithFormat:@"%@",itemName];
self.nameLabel.font = font;`
我不知道這可以幫到你,但這就是我之前所做的!
所以我終於成功了。
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
輸出。
考慮您的變量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 */
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.