2

[NSString UTF8String]特定の Unicode 文字で実行すると、結果の表現がデバイス/シミュレーターの表示と表示のconst char*両方で破損します。NSLog自体は正常に表示されますが、で使用するにはをNSStringに変換する必要があります。NSStringcStrCGContextShowTextAtPoint

再現するのは非常に簡単です(以下のコードを参照)が、同様の質問を検索してもうまくいきませんでした。私が見逃している基本的なものでなければなりません。

const char *cStr = [@"章" UTF8String];
NSLog(@"%s", cStr); 

ありがとう!

4

3 に答える 3

2

CGContextShowTextAtPointASCII 文字専用です。

回答については、このSO の質問を確認してください。

于 2012-05-06T06:52:26.627 に答える
1

文字列形式指定子(別名%s)を使用する場合、ASCIIでない場合、ac文字列の文字が正しく印刷されることを保証できません。定義した複雑な文字を使用すると、UTF-8でエスケープ文字を使用して表現し、文字を見つけることができる文字セットを示すことができます。ただし、%sはシステムエンコーディングを使用して、フォーマットに指定した文字列(この場合はNSLog)の文字を解釈します。Appleのドキュメントを参照してください。

https://developer.apple.com/library/mac/documentation/cocoa/Conceptual/Strings/Articles/formatSpecifiers.html

%s8ビット符号なし文字のヌル終了配列。%sは、UTF-8などではなく、システムエンコーディングで入力を解釈します。

CGContextShowTextAtPointが機能していない場合、そのAPIはmacRoman文字セットのみをサポートします。これはUnicode文字セット全体ではありません。

Unicode文字を表示するには、別のAPIを調べる必要があります。おそらくコアテキストはあなたが始めたいところです。

于 2012-05-06T06:50:16.820 に答える
1

私はこれまでこの問題に気づいたことはありませんが、いくつかの簡単な実験では、printf代わりにを使用NSLogすると正しいUnicode文字が表示されることが示されています。

試す:

printf("%s", cStr);

これにより、Xcodeコンソールとターミナルの両方で目的の出力(「章」)が得られます。nob1984が彼の回答で述べたように、文字データの解釈は呼び出し先次第です。

于 2012-05-06T06:50:46.810 に答える