1

UILabel に以下の NSString を表示したいと思います。

NSString *strValue=@"你好";

しかし、UILabelに表示できません。奇妙な文字が表示されます!

このコードを使用してテキストを表示します。

[NSString stringWithCString:[strValue UTF8String] encoding:NSUTF8StringEncoding];

私は試し[NSString stringWithCString:[strValue cStringUsingEncoding:NSISOLatin1StringEncoding] encoding:NSUTF8StringEncoding]てみましたが、うまくいきました

しかし、絵文字を表示できないcStringUsingEncoding:NSISOLatin1StringEncodingので、使用する必要がありますUTF8String

どんな助けでも感謝します。

4

1 に答える 1

2

ソース ファイルは UTF-8 ですが、使用しているコンパイラは ISO-Latin 1 だと認識しています。文字列と考えているのは、@"你好"実際には string@"你好"です。しかし、NSString*これを ISO-Latin 1 として返し、UTF-8 として扱うように要求すると、コンパイラーが取ったプロセスが逆になり、元の文字列になってしまいます。

ここで使用できる 1 つの解決策は、ソース ファイルのエンコーディングをコンパイラに伝えることです。使用するエンコーディング-finput-charset=UTF-8をコンパイラに伝えるコンパイラ フラグ (GCC の場合、clang については不明) があります。興味深いことに、すでに UTF-8 がデフォルトになっているはずですが、ロケールでこれをオーバーライドしている可能性があります。

移植性の高いソリューションは、ソース ファイルで ASCII のみを使用することです。\u1234またはを使用して非 ASCII 文字を文字列エスケープに置き換えることで、これを実現できます\U12345678。あなたの場合、あなたは使用します

NSString *strValue=@"\u4F60\u597D";

もちろん、文字列定数を正しく取得したら、エンコーディング全体を捨てて、strValue直接使用することができます。

于 2012-12-19T00:14:48.130 に答える