C 裡Ofstream寫檔案的中文問題

2021-07-02 13:22:48 字數 1208 閱讀 5632



說實話,這個問題很早就遇到,但是一直沒有蒐集比較完備的解決方法。這次把問題和解決方法都記錄下來,以備來日查閱。

通常是因為在呼叫fstream的open方法時,系統內部呼叫mbstowcs_s進行檔名轉換,而mbstowcs_s依賴於程式的本地化設定(locale系列函式設定)。

程式啟動時預設設定為lc_all="c"。而要正確開啟中文檔名的檔案,需要設定為lc_all="chinese"。

具體可以參見

這個原因剛好和問題1相反!在預設的c locale下wofstream無法輸出中文!要輸出中文,又得將lc_all設定回來!(即lc_all="c")

看上去要解決這2個辦法,就要在開啟檔案的時候保證使用locale 

"c",而在寫中文的時候保證使用locale "chinese"!

如果不想頻繁的切換,那麼最好的解決辦法是把專案設定為unicode。以下**可以順利通過測試。

[cpp]view plain

copy

print

?ofstream ofile("d://測試//測試.txt");    

if(ofile.is_open())    

else

wofstream wofile("d://測試//測試w.txt");  

if(wofile.is_open())    

else

ofstream ofile("d://測試//測試.txt");  

if(ofile.is_open())

else

wofstream wofile("d://測試//測試w.txt");

if(wofile.is_open())

else

還有很關鍵的一點!注意這裡的locale( "", locale::all ^ locale::numeric)!

「」表示

表示使用本地語言,這裡當然相當於「chs」或者「chinese」。

locale::all表示使用該語言的所有格式設定進行編碼轉換!

^是異或,locale::numeric表示數字格式。這裡的意思是避免轉換數字格式!否則123456輸出結果會成為123,456這種形式!

更多的locale格式轉換設定可以參考

至於ansi、unicode、utf8字串之間的轉換,請參考

C 中ofstream與ifstream用法

在c 中,有乙個stream這個類,所有的i o都以這個 流 類為基礎的,包括我們要認識的檔案i o,stream這個類有兩個重要的運算子 1 插入器 向流輸出資料。比如說系統有乙個預設的標準輸出流 cout 一般情況下就是指的顯示器,所以,cout write stdout n 就表示把字串 wr...

Python裡處理檔案with open寫法的由來

使用python讀寫檔案,一開始我們用的是 f open test.txt r f.read 最後一步是呼叫close 方法關閉檔案 f.close 如果開啟報錯ioerror,那後面的close也不會執行,因此,我們可以使用try語句來容錯 try f open path to file r pr...

C 語言ofstream的使用方法

檔案讀寫 char s 50 f.read s,49 s 50 0 注意要自己加上字串結束符 char s hello f.write s,strlen s 補充 記得讀寫完成後用f.close 關閉檔案。例子 下面的程式用於刪除帶有行號的源程式中的行號。include include using ...