[問題] big5 與 utf8 的使用經驗
最近打算重寫一些程式,需要使用大量的中文字,正在煩惱是否要整個
使用 utf8 寬字串,請教有經驗的人是否可分享你的撰寫經驗。
以下是我一些粗略的想法:
big5 字串:
(1) 可直接使用傳統字串 與 c++ string 表示方式
char * foo = "我" ;
string bar = "我是" ;
(2) 缺乏一些中文字
(3) 一個 big5 中文字使用 2 bytes 若有中英文混合在一起的字串,
要數中文字字數,需要額外處理
(4) 搜尋於中英混合字串內的文字若不額外處理可能會找錯
(5) 需留意 許功蓋 現象,這可能是最囉唆的
cout << "許\先生在成功\後留下了男人淚\" << endl ;
但以上的輸出字串若由檔案讀入,則不需要另加反斜線
(6) 要列印單一的中文字,有些麻煩
string bar = "第十名" ;
cout << bar[2] << bar[3] ; // 印出:十
utf8 寬字串
(1) 寫法有點囉唆
wchar_t * foo = L"我" ;
wstring bar = L"我" ;
輸出入需使用 wcout wcin
需使用 wifstream wofstream wistringstream wostringstream 等類別
另需設定語系 LC_ALL
(2) 好像缺乏(?)一些原有 big5 的特殊符號,例如:圓圈 方塊 注音符號 等字
例如:○ ● △ ▲
(3) 數中英文混合的字數很方便
wstring foo = L"ipad好貴" ;
wcout << foo.size() << endl ; // 6
(4) 可混合語言
(5) 沒有許功蓋的問題
(6) 列印單一字元方便
wstring foo = "i是一隻毛毛蟲" ;
for ( int i = 0 ; i < foo.size() ; ++i ) {
wcout << foo[i] << " " ; // 每個中英文字後加一個空格
}
(7) 傳統的 big5 檔仍然很多,若要讀入於程式中,需額外作檔案轉型或在程式
內使用 mbstowcs 將傳統字串轉為寬字元字串
以上是隨意想到的,有點零散,歡迎各位網友提供你的使用經驗。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.25.21
推
02/06 11:44, , 1F
02/06 11:44, 1F
→
02/06 11:46, , 2F
02/06 11:46, 2F
→
02/06 11:47, , 3F
02/06 11:47, 3F
→
02/06 11:47, , 4F
02/06 11:47, 4F
→
02/06 11:48, , 5F
02/06 11:48, 5F
→
02/06 11:49, , 6F
02/06 11:49, 6F
→
02/06 11:58, , 7F
02/06 11:58, 7F
→
02/06 12:00, , 8F
02/06 12:00, 8F
→
02/06 12:01, , 9F
02/06 12:01, 9F
→
02/06 12:09, , 10F
02/06 12:09, 10F
→
02/06 12:11, , 11F
02/06 12:11, 11F
推
02/06 12:49, , 12F
02/06 12:49, 12F
推
02/06 13:02, , 13F
02/06 13:02, 13F
→
02/06 13:19, , 14F
02/06 13:19, 14F
→
02/06 13:20, , 15F
02/06 13:20, 15F
推
02/06 13:26, , 16F
02/06 13:26, 16F
→
02/06 15:20, , 17F
02/06 15:20, 17F
推
02/06 22:12, , 18F
02/06 22:12, 18F
→
02/06 22:14, , 19F
02/06 22:14, 19F
→
02/06 22:16, , 20F
02/06 22:16, 20F
→
02/06 22:17, , 21F
02/06 22:17, 21F
推
02/06 22:32, , 22F
02/06 22:32, 22F
→
02/06 23:15, , 23F
02/06 23:15, 23F
→
02/06 23:16, , 24F
02/06 23:16, 24F
→
02/06 23:17, , 25F
02/06 23:17, 25F
→
02/07 00:41, , 26F
02/07 00:41, 26F
推
02/07 09:01, , 27F
02/07 09:01, 27F
推
02/07 14:17, , 28F
02/07 14:17, 28F
→
02/07 14:31, , 29F
02/07 14:31, 29F
→
02/07 14:32, , 30F
02/07 14:32, 30F
→
02/07 14:39, , 31F
02/07 14:39, 31F
推
02/07 14:47, , 32F
02/07 14:47, 32F
→
02/07 14:53, , 33F
02/07 14:53, 33F
→
02/07 15:11, , 34F
02/07 15:11, 34F
→
02/07 16:53, , 35F
02/07 16:53, 35F
推
02/09 00:37, , 36F
02/09 00:37, 36F
→
02/09 00:37, , 37F
02/09 00:37, 37F
→
02/09 00:38, , 38F
02/09 00:38, 38F
→
02/09 00:39, , 39F
02/09 00:39, 39F
→
02/09 00:40, , 40F
02/09 00:40, 40F
→
02/09 00:40, , 41F
02/09 00:40, 41F
→
02/09 00:40, , 42F
02/09 00:40, 42F
→
02/09 00:41, , 43F
02/09 00:41, 43F
→
02/09 00:42, , 44F
02/09 00:42, 44F
→
02/09 00:43, , 45F
02/09 00:43, 45F
→
02/09 00:43, , 46F
02/09 00:43, 46F
→
02/09 00:45, , 47F
02/09 00:45, 47F
→
02/09 00:46, , 48F
02/09 00:46, 48F
→
02/09 00:48, , 49F
02/09 00:48, 49F
→
02/12 22:43, , 50F
02/12 22:43, 50F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 5 篇):