如果你寫下面的程式
printf("%s\n",L"測試 printf %s (寬字元測試)");
我想你執行的結果應該是這樣
這是因為你用原生的 code page 去解釋 UTF-16 編碼的字串 "測試 printf %s (寬字元測試)". 這樣會造成亂碼.
解決方案:
Step 1: 告訴你的 C++ Runtime Library, 目前所有的字元都是用 Chinese Taiwan 來解釋.
setlocale(LC_ALL,"Chinese_Taiwan.950");
Step 2: 用 %S (大 S) 印出 UTF-16 的字串
printf("%S\n",L"測試 printf %S (寬字元測試)");
如果想用 _tprintf 來顯示 UTF-16 編碼字元, 該怎麼做?
用 %s (小s)
_tprintf(_T("%s\n"), _T("_tprintf %s (T 版本字元測試)"));
(注意: 你還是要在前面加 setlocale(LC_ALL,"Chinese_Taiwan.950");, 否則還是會出現亂碼) thanks 網友 Ericly.
下面是一個簡單的測試範例:
(注意: 因為我編譯時, 加了 UNICODE 與 _UNICODE, 故所有的寬字元都會被編成 UTF-16, 詳情請看 Makefile 設定)
執行結果:
by Jing
延伸閱讀
沒有留言:
張貼留言