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をファイルに書き込む方法はありますか?