作者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://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1434684083.A.C9E.html
1F:→ fo40225: 乾脆把原始码提供上来 大家比较好了解问题 06/19 11:55
2F:→ fo40225: 只怕是遇到问题A想到解法B过程中遇到困难C 06/19 12:08
3F:→ fo40225: 但A根本不应该用B解 06/19 12:08
原始码,请看:
https://github.com/Foxy4eva/LeagueSharp/blob/master/ChatLogger/Program.cs#L59
4F:→ soup514: stream有没有指定utf8? 06/19 13:05
原本是没有指定的
var stream = new StreamWriter(_path, true);
※ 编辑: FT6034 (59.115.32.120), 06/19/2015 13:20:05