[問題] GBK轉編碼

作者: pkmu8426 (巴426)   2014-06-17 11:24:08
各位先進好,
目標字(範例): 蹈桶狟婥
我測了一些方式, 想把這串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"));
編碼卻是轉換成功的, 可以正確顯示中文。
請問有人知道怎解嗎? 謝謝。
作者: pkmu8426 (巴426)   2014-06-17 15:37:00
不好意思 補充一下 官方語法我有測過, 也都是byte[]時轉轉出來的結果卻是失敗@ @有按照相對應的碼去接和解 用法應該是沒用錯
作者: Litfal (Litfal)   2014-06-17 17:07:00
答:列表下载你一定想反了。你想想你最後是因為哪個decode才拿到錯的字串?再反推回去就會得到答案了。
作者: watermark001   2014-06-17 23:21:00
目前windows系列編碼都是GB編碼~
作者: Litfal (Litfal)   2014-06-18 00:32:00
.net的string就是string,雖然他在記憶體中是unicode,但我不建議把編碼的概念和string混淆,把它想的最單純--就是個string就對了。只有二進位和String互相轉換時,才該想到編碼。
作者: ideaup (ideaupsoho)   2014-06-18 11:08:00
蹈桶狟婥==列表下載
作者: nfsong (圖書館我來了)   2014-06-18 12:41:00
作者: ssccg (23)   2014-06-18 13:54:00
string就是string沒有編碼,所謂編碼是把string表示成byte時的數值,如"列"在GB是C1D0,在Big5是A643,UTF8是E58897"蹈"在Big5是C1D0,不是"蹈桶狟婥"內容是GBK,而是當初把"列表下载"用GBK編碼成C1D0....,然後再用Big5解碼的結果這單純是編解碼的問題,跟轉碼沒有關係
作者: ideaup (ideaupsoho)   2014-06-18 19:46:00
將(蹈桶狟婥)以ansi 格式儲檔, 讀取為bytes[],再處理

Links booklink

Contact Us: admin [ a t ] ucptt.com