看板 C_Sharp 關於我們 聯絡資訊
※ 引述《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
fo40225: 乾脆把原始碼提供上來 大家比較好了解問題 06/19 11:55
fo40225: 只怕是遇到問題A想到解法B過程中遇到困難C 06/19 12:08
fo40225: 但A根本不應該用B解 06/19 12:08
原始碼,請看: https://github.com/Foxy4eva/LeagueSharp/blob/master/ChatLogger/Program.cs#L59
soup514: stream有沒有指定utf8? 06/19 13:05
原本是沒有指定的 var stream = new StreamWriter(_path, true); ※ 編輯: FT6034 (59.115.32.120), 06/19/2015 13:20:05