Re: [問題] 中文字串無法轉成Unicode
首先, L"字串" 這玩意的型態是 wchar_t*
如果你想要你的程式裡的字串全部都是這種的話
除了 C 字串的型態要用 wchar_t* 之外, 其他的字串相關函式都要用帶 w 的
例如 wprintf, wscanf, wcscpy, wcscmp, fgetws...等等
(詳細列表請參見 <cwchar> http://en.cppreference.com/w/cpp/header/cwchar
並且這個標頭檔也得要引入才有這些函式用)
C++ 的字串型別也一樣, 要用 std::wstring
(這倒不必另外引入別的標頭檔, 畢竟這只是個 typedef
它其實是 std::basic_string<wchar_t>
跟 std::string (aka. std::basic_string<char>) 只差在模版參數不同而已)
再來, 其實這種方式雖然確實有轉換了
但應該不是你所想的在執行時才把那個字串轉過去
而是編譯時就已經幫你轉好了寫在執行檔裡面的
也因此, 你的 L"典故" 在執行檔裡已經是一個大小為 3 的 wchar_t 陣列
內容依序是 0x5178, 0x6545, 0x0
再經過前篇推文說的所謂"很多巧合"之後就變成你的第一支程式的結果了
若是想要在執行時期把字串轉換的話
這除了要用什麼函式是個問題之外
(這裡先給個簡答: <cwchar> 裡有帶 mb 的那些函式就是了 不過有些眉角要顧)
還有一個大問題是你知不知道你的字串來源的編碼是什麼
不幸的是, 這是個 case by case 的問題, 無法一一詳述
因為這包含了該字串原本儲存的型式、該字串的讀入方式、以及讀入後對它的操作
這不是三言兩語就能解釋的清楚的
--
◢ ˊ_▂▃▄▂_ˋ. ◣ ▅▅ ▅▅ ι●╮ █▄▄▄▄▄
▍./◤_▂▃▄▂_◥ \'▊ HARUHI █████ <■┘ ▄▄▄▄▄▄▄
▎⊿ ◤◤◥█◥◥█Δ ISM By-gamejye ¢|\ ▌▌▌▌▌▄▌▌
▏ζ(▏●‵◥′●▊)Ψ ▏ █ ⊿Δ ▄▄▄ ▄▄▄▄
█/|▊ 〃 、 〃▋ |\ ▎ ハルヒ主義 █▄▄▄█▄▄
◥◥|◣ ‵′ ◢/'◢◢S.O.S 世界を大いに盛り上げるための涼宮ハルヒの団
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.195.39.85
※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1396367063.A.689.html
推
04/02 15:01, , 1F
04/02 15:01, 1F
推
04/03 15:54, , 2F
04/03 15:54, 2F
→
04/04 01:12, , 3F
04/04 01:12, 3F
→
04/04 01:18, , 4F
04/04 01:18, 4F
→
04/04 02:06, , 5F
04/04 02:06, 5F
→
04/04 02:06, , 6F
04/04 02:06, 6F
→
04/04 04:31, , 7F
04/04 04:31, 7F
→
04/04 04:33, , 8F
04/04 04:33, 8F
→
04/04 13:10, , 9F
04/04 13:10, 9F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):