5

ラベルに表示したい 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 を使用しています。

4

4 に答える 4

4

ラベルにクメール語を表示したい場合は、フォント 'Hanuman.ttf' を使用します。これは私が使用するコードです:

`UIFont *font = [UIFont fontWithName:@"Hanuman" size:20.0f];

self.nameLabel.text = [NSString stringWithFormat:@"%@",itemName];
self.nameLabel.font = font;`

フォントを設定

結果

これがあなたを助けることができるかどうかはわかりませんが、これは私が以前にしたことです!

于 2013-04-05T03:43:28.447 に答える
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];

@Vitaly_Sと@iphonicに+1して、その答えが最終的にこの解決策につながりました。これに出くわした他の人のために。Xcode 4.6.1 の時点で、デバッグ ウィンドウが文字列を正しくレンダリングすることを信頼できないようですが、NSLog出力を信頼することはできます。

于 2013-04-04T15:44:03.183 に答える
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 */
于 2013-04-04T10:21:14.933 に答える