3

ICUのustdio関数を使用して、UnicodeStringオブジェクトをさまざまなエンコーディングのファイルに書き込みますが、BOMの先頭に追加されていないようです。

私のコード:

void write_file(const char* filename, UnicodeString &str) {

    UFILE* f = u_fopen(filename, "w", NULL, "UTF-16 LE");
    u_file_write(str.getTerminatedBuffer(), str.length() + 1, f);
    u_fclose(f);
}

int _tmain(int argc, _TCHAR* argv[])
{
    UnicodeString str(L"ΠαρθένωνΗ");

    write_file("test.txt", str);

    return 0;
}

LEをBEに変更すると、ファイルエンコーディングがスワップしますが、BOMがないため、16進エディターの出力ファイルは次のようになります。

A0 03 B1 03  C1 03 B8 03  AD 03 BD 03  C9 03 BD 03  97 03 00 00

注:コードページを「UTF-16」に設定すると、BOMが表示されますが、手動でエンディアンを指定すると、BOMが表示されなくなります。

または、BOMを使用してUnicodeStringをファイルに書き込む方法はありますか?

4

2 に答える 2

5

推測すると、「UTF-16LE」と「UTF-16BE」は、バイト順序が適切に指定されていて、ファイルが使用されるコンテキストでBOMが不要な場合に使用することを目的としています。

独自のBOM文字'\ufeff'をファイルに書き込むことができるはずです。

于 2011-08-19T16:14:09.713 に答える
2

u_fputc(0x00feff,f);

それをします。

于 2011-08-19T20:57:44.350 に答える