2

ワイド文字をファイルに出力したいのですが、fwprintfそれを行うと説明されていますが、それを行いません。サンプルコード:

const char *testFileName = "/Users/jdmuys/wideTestFile.txt";
FILE *wideTestFile;
wideTestFile = fopen(testFileName, "w");
fwide(wideTestFile, 1);
fwprintf(wideTestFile, L"12345");
fclose(wideTestFile);

その後、私のファイル「wideTestFile.txt」には正確に5バイトが含まれています.1631 32 33 34 35進ダンプユーティリティによると。

おそらく追加の引数としてロケールを取る をfwprintf呼び出すように、現在のロケールに何らかの問題があると思われます。fwprintf_l

その最後の呼び出しの使用方法について読んでいますが、ロケールとして何を渡す必要があるかを理解できません。ドキュメントはそれについてかなり曖昧です(または、おそらく私はそれを理解できません)。

fwprintf文書化されたとおりに動作しない理由はありますか? の使用例はありますfwprintf_lか?

どうもありがとう、

JD

これは、Objective-C コードから iOS 6.0 をターゲットとする Mac OS X 10.8.2 の下の Xcode 4.5.1 です。しかし、それは本当に重要ではありません。

4

2 に答える 2

0

Your locale is probably some variation of UTF-8, which means that the output will only be wide when printing wide characters (i.e. characters outside of the ascii code 0 - 127).

If you want to force wide printing (e.g. UTF-16LE) then you need to use libiconv. This answer kind of illustrates why it doesn't tend to do what you think it does.

于 2012-10-15T17:00:01.073 に答える
0

ここで推測してみます。

UTF-8で保存しています。現在、ほとんどの ASCII 文字について、ASCII での表現と UTF-8 での表現はまったく同じです。現在、UTF-8 では、最初のバイトの上位ビットが「文字」の長さをエンコードしています。例として、0x7F までのすべてが 1 バイト (つまり、標準 ASCII) に収まり、0x7FF は 2 バイトに収まり、何度も続きます。詳細については、 http://en.wikipedia.org/wiki/UTF-8#Descriptionを参照してください。

問題を「修正」するには、UTF-8 テーブルの上位にある文字を使用するだけです。

前述のウィキペディアのページからいくつかの例をリッピングするには:

  • $ は 1 バイトに収まる必要があります
  • ¢ 2 バイト
  • 3 ユーロ
  • 4つに
于 2012-10-15T16:52:47.370 に答える