看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Dev C++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) #include "stdio.h" #include "windows.h" 問題(Question): 想要可以寫出 一個文字檔 是使用 UTF8 編碼模式 而且裡面的中文字也不會是亂碼,有 Google 過, UTF8的檔頭 是需要先寫入 0xEF 0xBB 0xBF 這三個 byte! 我也有照實寫入入這三個Byte,這時候再用 Notepad++ 打開來看 的確 編碼方式 變成了UTF8了! 但是...寫入的中文字 卻變成了亂碼 = =a 預期的正確結果(Expected Output): 希望 可以產生的檔案是 UTF8 格式,以及中文字不是亂碼。 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) 網頁版 : http://codepad.org/Z71SCAjA #include "stdio.h" #include "windows.h" int main(int argc, char * argv[]){ FILE *fp = NULL; char FileName[] = "test.txt"; char String[] = "哈囉! 你好嘛!? abcdefg"; if ((fp = fopen (FileName, "w")) == NULL) { printf("開啟檔案錯誤!\n"); } else { putc(239,fp); putc(187,fp); putc(191,fp); fprintf (fp, String); fclose (fp); } } 補充說明(Supplement): 希望給個方向,像是有沒有函式可以用,或者 Google 關鍵字的方向ˊˋa 以上 謝謝 >"< -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 1.161.13.57
cuteclare:...說真的~你用編輯器看是中文~跟用printf看是中文. 10/28 02:52
cuteclare:是兩回事 10/28 02:53
uranusjr:UTF-8 不需要 BOM 吧 10/28 02:58
Linux:喔喔,我找到解決方法了!! 10/28 03:09
Linux:這邊找到的 http://tinyurl.com/8r35lhs 10/28 03:10
Ebergies:希望你知道為啥它要這麼做~ :D 10/28 10:03
ykjiang:UTF8 不用 BOM 10/28 13:12
ykjiang:你的問題是存檔時根本沒編碼成 UTF8 10/28 13:13
ykjiang:如果存的大都是中文字,可考慮用 UTF16 比較省空間 10/28 13:15
MOONRAKER:非常幽默。 10/28 17:09
calqlus:原本我也是用跟你用一樣的編譯器 10/28 18:55
calqlus:直到遇到跟妳一樣的問題 就換codeblock了 10/28 18:55
calqlus:codeblock 可以直接在環境上改成utf8格式 10/28 18:56
calqlus:在devc++雖然也有幾個折衷的辦法 但 還是省點力氣吧 10/28 18:57
cuteclare:我以為是跟compiler比較有關係欸 devc 也不是用gcc? 10/28 19:09
uranusjr:你的 string 會是什麼編碼完全取決於你的 source code 裡 10/28 21:34
uranusjr:string literal 寫出來時是什麼編碼; 有些編譯器會檢查, 10/28 21:34
uranusjr:有些會對特定編碼錯誤會警告, 不過 gcc 屬於不管的 10/28 21:35
cuteclare:我以為可以在compile時期指定要用啥編碼欸~? 10/28 22:25
MOONRAKER:on-fly convert string literal?有這麼雞婆的compiler? 10/28 23:45
QQ29:你應該要知道你中文字utf8的byte form吧 10/29 19:13
QQ29:我比較好奇這樣寫會輸出big5嗎 10/29 19:15
MOONRAKER:若在windows command prompt下會以big5(windows 1252)為 10/30 09:06
MOONRAKER:預設碼頁。在現在的Linux distro中則都是UTF-8 clean。 10/30 09:07
MOONRAKER:若是微軟現在的IDE應該也都轉為UTF-8 clean,VC6那種上 10/30 09:07
MOONRAKER:古化石(發音為垃圾)就可能還是Big5。 10/30 09:08
neutrino:原po試試看把"哈囉!" 換成 "\xe5\x93\x88\xe5\x9b\x89!" 10/30 10:56
neutrino:再想想看你的IDE的編輯器 為何或如何去認你放進去的 10/30 10:57
neutrino:"哈囉" 10/30 10:57