作者FT6034 (耐心等待)
看板C_Sharp
標題Re: [問題] Big5 轉 UTF-8
時間Fri Jun 19 11:21:20 2015
※ 引述《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