1

私は現在のコードを持っていますが、CFShowが\u00e9のUnicode UTF8エンコーディングをéに変換しないという事実を除いて、動作しているようです

#include <CoreFoundation/CoreFoundation.h>

int main()
{

    char *s = "This is a test of unicode support: fiancée\n";
    CFTypeRef cfs = CFStringCreateWithCString(NULL, s, kCFStringEncodingUTF8);
    CFShow(cfs);

}

出力は

This is a test of unicode support: fianc\u00e9e
                                        |____|
                                           > é doesn't output properly.

Unicode であることを CFShow に指示するにはどうすればよいですか? ac文字列の場合、printfは問題なく処理します。

4

2 に答える 2

5

CFShow()デバッグ専用です。あいまいさを避けるために、意図的に非 ASCII コードをエスケープ コードに変換しています。たとえば、「é」は 2 つの方法で表現できます。U+00E9 LATIN SMALL LETTER E WITH ACUTE、または U+0065 LATIN SMALL LETTER E の後に U+0301 COMBINING ACUTE ACCENT が続きます。CFShow()UTF-8 シーケンスを発行する場合、端末はそれを「é」と表示する可能性が高く、文字列にどのバリアントが含まれているかを知ることができません。CFShow()それはデバッグのための有用性を損ないます。

CFShow()文字列の内容が何であるかを理解している限り、なぜ出力が何であるかを気にするのですか?

于 2013-09-07T02:08:12.280 に答える
1

文字列が Unicode であることCFShowはわかっていますが、コンソール用に Unicode をフォーマットする方法がわかりません。おそらく、代替手段を探す以外に何もできないとは思いませんNSLog

于 2013-09-07T01:57:13.390 に答える