→ priv:我有推在前一篇了,基本上wcout輸出會經過一個locale facet 10/19 00:03
→ priv:所以在Linux底下你必須設定好imbue/locale才能正常輸出 10/19 00:03
→ priv:windows底下利用locale雖然可以正確輸出到檔案 10/19 00:04
→ priv:但是由於C++ library的部份不支援unicode console 10/19 00:04
→ priv:所以必須利用系統原有的code page才能顯示 10/19 00:05
推 james732:這篇文章的前一篇在哪裡....XD 10/19 00:05
→ priv:而且受限於code page不能完整利用unicode的功能 10/19 00:05
→ priv:以Windows來說必須利用WriteConsole api才能完整使用unicode 10/19 00:06
推 james732:p大你太棒了,我一直搞不清楚wcout要怎麼用... 10/19 00:12
→ james732:感謝樓上XD 10/19 00:59
→ legnaleurc:這就是我想問的 XD, 雖然我還是不認為這東西好用 10/19 01:32
→ legnaleurc:咦 ... 我還是印不出來 orz 你的 Linux sample 是因為 10/19 01:39
→ legnaleurc:string literal 原本就是 UTF-8 嗎? 10/19 01:39
→ james732:Linux的我可以印出來耶 10/19 01:41
→ legnaleurc:我是用我原本的 code, 加上 wcout.imbue 10/19 01:42
→ legnaleurc:如果 string literal 原本就是 UTF-8, 那 cout 也一樣 10/19 01:43
→ priv:wcout的重點在於internal是wide char 10/19 09:15
→ priv:cout的話相當於用C locale去處理 10/19 09:16
→ priv:所以本來是什麼就是印什麼 10/19 09:16
→ priv:如果說整個系統的LC都是utf8,你要顯示utf8不是問題 10/19 09:17
→ priv:但是想要利用wide char的function處理文字就會有困難 10/19 09:17
→ legnaleurc:well, 你有用我寫的 code 去試嗎? 10/19 12:02
→ legnaleurc:我的重點在 L"" <= 裡面的內容如果原本就是 UTF-8 10/19 12:02
→ legnaleurc:那不只 wcout, cout 出來的效果也一樣 10/19 12:03
→ legnaleurc:我現在就是轉成 wchar_t 的 encoding (UTF32) 印不出來 10/19 12:03
→ legnaleurc:才有這個疑問 10/19 12:03
→ james732:我跑priv的程式可以印,但l大的程式也一樣是???? 10/19 12:04
→ angleevil:不知道有高手想整理這篇嘛... 10/19 12:45
→ priv:編程式的時候compiler處理L""其實有另外的問題 10/19 12:51
→ priv:windows底下可以把.cpp用utf16le去儲存 10/19 12:52
→ priv:那L""放進wchar就不會有疑問 10/19 12:52
→ priv:其它平台的話只能見招拆招... 10/19 12:52
→ priv:比較實際的作法還是從resource file讀wide char進來 10/19 12:54
→ priv:而不是一定要想辦法把unicode embed到cpp裡面 10/19 12:54
→ priv:你那個程式我不是很了你想要做到的是什麼 10/19 12:55
→ priv:所以沒辦法明確找到方向去試著改.. 10/19 12:55
→ priv:這是我改過可以在linux底下印出「正體中文」四個字的cpp 10/19 13:26
→ priv:Linux的範例其實也是從別的地方抄來的 10/19 13:27
→ priv:看起來重點依然是要有imbue設定完成才能印出 10/19 13:27
→ priv:相對來說如果今天用wcin讀檔的話就不需要經過複雜的iconv了 10/19 13:30
→ priv:測試環境為Ubuntu 10.10 gcc 4.4.5 10/19 13:32
→ priv:另外linux的editor目前起來也都可以save utf-8 10/19 13:39
→ priv:.cpp內嵌utf8的L"" string應該是沒什麼問題的 10/19 13:39
→ priv:sorry,目前看起來 10/19 13:39
→ priv:如果有需要處理多國語言的人參考看看吧 10/19 13:40
推 james732:再推一次priv的範例,我也跑出了「正體中文」 10/19 13:40
→ legnaleurc:literal 裡面放 UTF-8 字串在 VC 會有問題,因為 10/19 14:49
→ legnaleurc:cl.exe 會用目前的 system locale 作為 source file 的 10/19 14:49
→ legnaleurc:encoding, 很蠢,所以我才會用 hex 表達 UTF-8 10/19 14:50
→ legnaleurc:另外 wchar_t 在兩個系統分別要是 UTF-16 和 UTF-32 10/19 14:51
→ legnaleurc:這是為什麼會有 iconv 和 MultiByteToWide 的理由 10/19 14:51
→ legnaleurc:我照你的寫法關閉了 sync 果然就沒問題了,不過看說明 10/19 14:52
→ legnaleurc:還是不太了解這是什麼原理?C 的 stdio 錯了嗎? 10/19 14:53
→ legnaleurc:另外,如果能使用使用者當下的 locale, 可能會更完整? 10/19 14:55
→ priv:windows底下其實為了避免locale不對可能要先執行chcp 10/19 14:58
→ priv:我相信在Linux底下應該也是有辦法取得當前的locale 10/19 14:59
推 VictorTom:推長知識:) 10/19 20:29
→ firejox:iconv是好物呀~~~ 10/19 20:56
推 xatier:長知識了 10/20 01:49