Re: [問題] Big5 轉 UTF-8

看板C_Sharp作者 (耐心等待)時間9年前 (2015/06/19 11:21), 9年前編輯推噓0(004)
留言4則, 2人參與, 最新討論串3/5 (看更多)
※ 引述《FT6034 (耐心等待)》之銘言: : 推 leicheong: 你的args在.NET runtime抓進來時已經變成UTF16-LE了... 06/17 21:59 ------------------------------------------------------------------------------ byte[] b = Encoding.GetEncoding("UTF16-LE").GetBytes(args.Message); byte[] c = Encoding.Convert(Encoding.GetEncoding("UTF16-LE"), Encoding.UTF8, b); string utf8Str = Encoding.UTF8.GetString(c); stream.WriteLine("[" + Utils.FormatTime(Game.ClockTime) + "]" + " sender: " + args.Sender.Name + " says: " + utf8Str); stream.Close(); ------------------------------------------------------------------------------ 輸入:「測試」 -> 抓到空白 文字檔記錄:空白 : 推 HwangTW: 你試試看逐步執行,應該可以看到文字編碼 06/18 10:07 : → ssccg: 老實說看不懂你在轉什麼,args.Message type是string的話 06/18 11:41 : → ssccg: 本來就沒有編碼問題根本不用轉 06/18 11:42 : → ssccg: 有編碼的是binary資料(byte[]),不是string 06/18 11:44 事情是這樣發展的... 主程式是外國人針對某遊戲寫的,透過API取得聊天室訊息 原程式儲存資訊至 txt 檔,編碼是 UTF-8 輸入 "測試" , txt 檔裡頭記錄 "皜祈岫" ,所以我猜測 args.Message 是 BIG5 加入下列程式碼後, byte[] byt = Encoding.GetEncoding(950).GetBytes(args.Message); string utf8Str = Encoding.GetEncoding(65001).GetString(byt); 輸入 "測試" , txt 檔裡頭記錄 "測試" 輸入 "中中" , txt 檔裡頭記錄 "中中" 但是 輸入 "測" , txt 檔裡頭記錄 "??" 輸入 "中文字" , txt 檔裡頭記錄 "中????" 所以才上來求教 @@" -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.115.32.120 ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1434684083.A.C9E.html

06/19 11:55, , 1F
乾脆把原始碼提供上來 大家比較好了解問題
06/19 11:55, 1F

06/19 12:08, , 2F
只怕是遇到問題A想到解法B過程中遇到困難C
06/19 12:08, 2F

06/19 12:08, , 3F
但A根本不應該用B解
06/19 12:08, 3F

06/19 13:05, , 4F
stream有沒有指定utf8?
06/19 13:05, 4F
原本是沒有指定的 var stream = new StreamWriter(_path, true); ※ 編輯: FT6034 (59.115.32.120), 06/19/2015 13:20:05
文章代碼(AID): #1LWugpoU (C_Sharp)
討論串 (同標題文章)
文章代碼(AID): #1LWugpoU (C_Sharp)