簡體   English   中英

iOS UTF-8標簽字符串

[英]iOS UTF-8 Label String

我有一個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 ,因此它總是不正確並且可能導致應用程序崩潰

當我想在標簽上顯示高棉時,我使用字體'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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM