C_Sharp 板


LINE

各位先進好, 目標字(範例): 蹈桶狟婥 我測了一些方式, 想把這串GBK編碼的文字轉成可識別的中文, 無論是簡或繁。 目前已知 1. .Net中任何String的表示形式 都是Unicode 2. System.text.Encodng class提供一些 API可以轉 3. 轉換時要指定輸入編碼 輸出編碼, 並一律以byte[]形式進行轉換 相關語法 ex. Encoding.getEncoding("編碼").getbytes(string) (轉成byte[]) Encoding.convert(原編碼,目標編碼, 要轉的byte[]) (轉成byte[]) Encoding.getEncoding("編碼").getString(byte[]) (轉成string) 等等... 我做了各種測試 但是找不到正確的用法把GBK文字轉成中文 頂多show出的結果是原來的GBK目標字而不是亂碼。 不曉得原因為何? 如果是.NET不支援GBK, 但我測試過 下面這行 StreamReader(path + ".txt",Encoding.GetEncoding("GBK")); 編碼卻是轉換成功的, 可以正確顯示中文。 請問有人知道怎解嗎? 謝謝。 -- 人生 何必 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.118.23.78
※ 文章網址: http://webptt.com/m.aspx?n=bbs/C_Sharp/M.1402975455.A.3AA.html
1F:→ pkmu8426:不好意思 補充一下 官方語法我有測過, 也都是byte[]時轉 06/17 15:37
2F:→ pkmu8426:轉出來的結果卻是失敗@ @ 06/17 15:37
3F:→ pkmu8426:有按照相對應的碼去接和解 用法應該是沒用錯 06/17 15:39
4F:推 Litfal:答:列表下载 06/17 17:07
5F:→ Litfal:你一定想反了。 06/17 17:08
6F:→ Litfal:你想想你最後是因為哪個decode才拿到錯的字串?再反推回去 06/17 17:21
7F:→ Litfal:就會得到答案了。 06/17 17:21
抱歉 不是很能理解... 我原不想把語法貼上來 因為可能是錯的 但不貼上來 可能大家也不知道錯在哪 我下面貼一下。 string s = "蹈桶狟婥"; //轉成GBK byte[] byte[] gbk_byte = Encoding.GetEncoding("gbk").GetBytes(s.ToString()); //轉成UTF8 byte[] byte[] utf8_byte = Encoding.Convert(Encoding.GetEncoding("gbk"), Encoding.UTF8, gbk_byte); //轉成顯示字串 string text = Encoding.UTF8.GetString(utf8_byte); 初步想法是這樣 請問哪邊是該修正的? 謝謝
8F:→ Litfal:我就說反了吧XD,你是把GBK編碼的文件,用其他編碼器decode 06/17 21:18
9F:→ Litfal:這時就已經變錯的字了。 06/17 21:19
10F:→ Litfal:以你的狀況,就是拿BIG5解了GBK的Binary,所以拿到錯的字 06/17 21:29
11F:→ Litfal:所以要反過來用BIG5編那串錯的字,拿回原始的Binary。 06/17 21:33
12F:→ Litfal:再拿原始的Binary用正確的GBK encoding解成文字。 06/17 21:34
13F:→ Litfal:但要注意,如果在錯誤的BIG5解時拿到 ? (沒有對照的字)那這 06/17 21:35
14F:→ Litfal:樣也是轉不回來的。 06/17 21:35
謝謝回覆 @ @ 我想請問 怎麼知道是Big5?? 我想過可能Win7系統Default可能是UTF8之類 卻怎樣也沒想過朝Big5去想 是Compiler的環境? 或者是我抓的目標本身是Big5.. 光從字串就可以看出是Big5編的亂碼.. 另外所謂的Binary 如果要轉的字串來源 如本篇 String s = ""; 直接就是宣告在程式中了 那做法也是一樣用Big5去解? 其實我看得懂你的意思 簡單說就是我以為的編碼 卻不只是我以為的。 只是不太懂 明明照API的參數去call 我以為是對 但其實卻錯了(?) 冒出個Big5 (然後我一直有想到是否該轉回Unicode 再繼續做進一步的轉換。 就是沒想到Big5) 如果問題簡化一點 純粹就是宣告在程式中的String 只是內容是GBK, 這樣做法會不會不一樣?? 拍謝問了這麼多 .. 我再努力做看看 謝謝。 ※ 編輯: pkmu8426 (122.118.23.78), 06/17/2014 21:54:48
15F:推 watermark001:目前windows系列編碼都是GB編碼~ 06/17 23:21
16F:→ Litfal:.net的string就是string,雖然他在記憶體中是unicode,但 06/18 00:32
17F:→ Litfal:我不建議把編碼的概念和string混淆,把它想的最單純--就是 06/18 00:32
18F:→ Litfal:個string就對了。 06/18 00:33
19F:→ Litfal:只有二進位和String互相轉換時,才該想到編碼。 06/18 00:34
20F:推 ideaup:蹈桶狟婥==列表下載 06/18 11:08
21F:推 nfsong:推 06/18 12:41
22F:→ ssccg:string就是string沒有編碼,所謂編碼是把string表示成byte時 06/18 13:54
23F:→ ssccg:的數值,如"列"在GB是C1D0,在Big5是A643,UTF8是E58897 06/18 14:20
24F:→ ssccg:"蹈"在Big5是C1D0,不是"蹈桶狟婥"內容是GBK,而是當初把 06/18 14:41
25F:→ ssccg:"列表下载"用GBK編碼成C1D0....,然後再用Big5解碼的結果 06/18 14:44
26F:→ ssccg:這單純是編解碼的問題,跟轉碼沒有關係 06/18 14:47
27F:→ ideaup:將(蹈桶狟婥)以ansi 格式儲檔, 讀取為bytes[],再處理 06/18 19:46
哈哈 謝謝各位大德回覆 已經解決。 (原來我前幾天曾經看過一篇文後測出的結果 不是錯覺 - -) 也的確是跟轉碼沒關係(這邊是陷入的第二個迷思!!) 幸好 經過這次經驗 我學得更深刻了! 謝謝各位。 我把解法PO在下面 1. 當明確知道最終字串的原始編碼(GBK) 以及最後是被哪種編碼(Big5) decoding Encoding Big5 = Encoding.GetEncoding("Big5"); Encoding GBK = Encoding.GetEncoding("GBK"); byte[] big5_byte = Big5.GetBytes("原始字串"); string s_result = GBK.GetString(big5_byte); 2. 當不曉得最終字串是被哪種編碼decode 只知道最原始的encoding編碼 byte[] big5_byte = Encoding.Default.GetBytes(s); string s_result = GBK.GetString(big5_byte); 一般來說 用第二種方法比較省事, 看了一篇文章 Default是照所用OS的編碼語系 當然 兩種方法僅適用經過一層的編、解碼 如果中間還經過許多步驟的邊解碼... 可能必須再靠人工一一測試了。 ※ 編輯: pkmu8426 (114.46.222.47), 06/19/2014 00:06:48







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燈, 水草

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

TOP