C_and_CPP 板


LINE

遇到的問題: (1) string中含2bytes的中文字符及1byte的空格字元要如何計算strlen (2) 2bytes的中文字符string中要如何輸出單一字元(一般string中的string[0]) 問題詳細描述: 我想要用既有的詞庫建一個詞庫,修改成我想要的格式 既有詞庫原本的格式為: 一 般 直 些 時 定 月 點 丁 二烯 烷 香 七 彩 嘴八舌 里香 零八落 情六慾 丈 夫 量 母娘 人 希望輸出為(50是預設詞頻): 一般 50 一直 50 一些 50 一時 50 一定 50 一月 50 一點 50 丁二烯 50 丁烷 50 丁香 50 七彩 50 七嘴八舌 50 七里香 50 七零八落 50 七情六慾 50 丈夫 50 丈量 50 丈母娘 50 丈人 50 以下是我的程式碼: https://drive.google.com/open?id=1QGOG5uFO22OAcs9pgV83eVB41FpltqI- 如果輸入的檔案是英文可以正確執行 https://imgur.com/cVr45nT 但如果輸入的檔案是中文就會變成亂碼 上網查了一下是因為在中文編碼中一個字元佔2bytes 用%c輸出一次只能輸出1byte 有看到資料說好像可以將char型別改為wchar_t strlen的部分用wcslen替換 我用上面程式碼中的第22行(被註解掉的那行)做了一些測試 好像還是有一些問題 https://imgur.com/jLvgT6L 最後一筆測資”你好嗎”的wcslen似乎就有錯誤 輸入檔案中有夾帶1byte的空格字元似乎也不能完全用wcslen算字元數 另外試了一下若輸入為中文時想只輸出一個中文字元(例如第一個字元) printf(“%c”, data_buf[0]) 試過用%c或%ls好像都會出現亂碼或是錯誤 問了幾位平常有在coding的同學 好像都沒有處理過中文的問題 還請版上各位前輩幫忙了,感謝 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.44.67.165
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1509691764.A.C47.html ※ 編輯: skyHuan (114.44.67.165), 11/03/2017 14:55:05 ※ 編輯: skyHuan (114.44.67.165), 11/03/2017 15:04:00
1F:→ MOONRAKER: 用%s輸出 第一個漢字就用substr取最前面兩個字元11/03 15:05
有查了一下,C沒有支援substr函式,但可以用strncpy函式代替,先稍微做了測試,讀取 中文的時候好像還是會有問題 https://imgur.com/qBxH4eF 讀取英文取多個字元是正常但少字元最後好像也會有亂碼 https://imgur.com/d7FVgG3 https://imgur.com/CeYiDyi 是使用這個函式有沒注意到的地方嗎,感謝
2F:推 stupid0319: 中文有UTF-8,UTF-16,跟BIG5,UTF8跟UTF16的碼是一樣的11/03 16:03
3F:→ stupid0319: 但UTF8存在記憶體的方式不同,詳細要上網查看看11/03 16:05
4F:→ stupid0319: 程式預設比較建議用unicode來編碼,可以吃萬國碼11/03 16:07
5F:→ stupid0319: 看你程式應該是用BIG5,也就是多字元,查一下規則11/03 16:11
6F:→ stupid0319: 把BIG5規則代入你的code中就不會有亂碼了11/03 16:11
7F:→ stupid0319: BIG5不太能用wchar來處理,碰到單個字母就會有亂碼11/03 16:13
8F:→ serikafan: 用wchar請用mbstowcs或是MultiByteToWideChar去轉換11/03 17:09
※ 編輯: skyHuan (114.44.67.165), 11/03/2017 18:30:06 ※ 編輯: skyHuan (114.44.67.165), 11/03/2017 18:39:39
9F:→ serikafan: 在程式碼中直接用中文會跟檔案編碼跟編譯器有無支援相11/03 18:54
10F:→ serikafan: 關,最好避免這麼做11/03 18:56
11F:→ serikafan: 英文出現亂碼是因為你忘了在結尾補\0 11/03 19:02
12F:→ serikafan: 你的問題用wchar應該比較好解決11/03 19:06
13F:→ serikafan: https://ideone.com/wazkGa11/03 19:06
參考了serikafan大的code, 加上setlocale(LC_ALL,"Chinese_Taiwan.950"); printf要用大寫的%C跟%S (寬字元)後, 問題已經解決,謝謝各位幫忙解答 ※ 編輯: skyHuan (114.37.176.48), 11/03/2017 21:40:56 ※ 編輯: skyHuan (114.37.176.48), 11/03/2017 21:41:37







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Tech_Job站內搜尋

TOP