Unicode寫入txt的問題

2021-09-02 00:16:06 字數 835 閱讀 9695

真是一入unicode深似海,乙個簡單的寫txt都有想不到的坑。

cstring outs;

errno_t err;

file* fp;

err= _wfopen_s(&fp,filename, l"w+,ccs = unicode");

fwrite(outs, sizeof(wchar_t), outs.getlength(), fp) ;

fclose(fp);

這麼寫看似沒有問題,但實際上還有兩個問題

一。亂碼

這個主要問題困擾我很久,怎麼寫都亂碼,開始發現「\r\n」沒有加l,心想真粗心,奇怪的是這麼寫vs也認為正確。但是加了l依舊亂碼,看了一下msdn

在文字模式下,輸入時,回車-換行組合將轉換為單一的換行,輸出時,換行字元將轉換為回車-換行組合。 當 unicode 流 i/o 函式在文字模式(預設設定)下執行時,源或目標流將假定為一系列多位元組字元。 因此,unicode 流輸入函式將多位元組字元轉換為寬字元(就像呼叫mbtowc函式一樣)。 出於同一原因,unicode 流輸出函式將寬字元轉換為多位元組字元(就像呼叫wctomb函式一樣)。

b

在二進位制(未轉換)模式下開啟;不進行涉及回車和換行字元的轉換。

終於明白了都是t模式在搗蛋,而且這個模式是預設的必須加b才能不轉換

二就是預設開啟編碼的問題,如果沒有bom預設是按多位元組開啟的,那依舊是很酸爽的感覺,所以必須加上這個頭

word wsignature = 0xfeff;

fwrite(&wsignature, 2, 1, fp);

那麼就完美解決了

txt檔案寫入

txt檔案的讀取 public static void main string args system.out.println 一共行數 i 寫入txt檔案 方法一 file file new file g aaa bbb ceshi.txt 相對路徑,如果沒有則要建立乙個新的output。txt檔...

mysq,php寫入unicode字元

一些特殊字元 圖示字元 在儲存 mysql時,不能插入資料庫 可以先把字元 特殊字元和正常字元 用 base64 encode 轉為base64編碼,儲存到mysql 取出還原時,用 base64 decode 進行base64解碼,再用json decode 還原為原字元 一些特殊字元 圖示字元 ...

PHP寫入txt檔案時的換行問題

用file put contents 函式寫入txt檔案時需要換行。剛開始想到 n file put contents text.txt out trade no,file put contents text.txt n amount,發現會直接輸出,60459 n 372後來改為 r n發現還是不...