2009-08-18 101 views
1

我剛剛從Builder 6切換到Builder 2009,並且有一個問題。使用CodeGear C++ Builder 2009將unicode字符串寫入文件

如何將unicode字符串寫入文件?

TBytes Preamble1 = TEncoding::Unicode->GetPreamble(); 
UnicodeString str1("string1"); 
int len = TEncoding::Unicode->GetByteCount(str1); 

FileWrite(iFile,&Preamble1[0],Preamble1.Length); 

FileWrite(iFile,str1.c_str(),len); 

這就是我現在正在做的,但我想應該有一些本地方式。
順便說一句,可以一次獲得序言,並假定在應用程序生命週期中它不會改變?從UnicodeString的可用文檔,它似乎總是UTF-16 LE

+0

不是CodeGear C++支持標準C++庫嗎?爲什麼不使用std :: wstring和std :: ofstream來完成這項工作? – Sahas 2009-08-18 02:38:41

+0

請問你能提供一個實際的例子嗎? 我從來沒有使用unicode stl函數,只有普通的函數。 – Andrew 2009-08-18 03:39:42

回答

3

我的第一個問題是「什麼樣的文件」?

假設它是一個文本文件而不是二進制文件,您希望在輸出上使用什麼樣的編碼? UTF-8通常是一個不錯的選擇,因爲它受到像記事本這樣的東西的支持,而對於普通的「拉丁」字符,沒有任何開銷。個人而言,要編寫'簡單'文本文件,我只需將字符串添加到TStringList中,然後使用SaveToFile方法即可。

TStringList *list = new TStringList; 
list->Add(str1); 
list->Add(str2); 
... 
list->SaveToFile(filename, TEncoding::UTF8); 
+0

很好的答案。謝謝。 是的,我在問簡單的文本文件。 我的主要目標是實現unicode日誌記錄,所以我最終編寫了一個簡單的模板類,它使用選定的編碼類型(UTF-8,UTF-16 BE/LE)打開文件,然後在FileWrite輸入時輸出。 但對於一次寫操作,你的選擇似乎是最好的。 – Andrew 2009-08-20 01:16:30