Winfrom程序,获取的字符串,编码是GBK,例如“緥”是“设”,“Km”是“测”,
如何把此类字符串转换成正常文字(中文,数字,英文)。//以下只能转中文
byte[] buff = Encoding.GetEncoding("GBK").GetBytes("緥2");
string strs=Encoding.Unicode.GetString(buff);
如何把此类字符串转换成正常文字(中文,数字,英文)。//以下只能转中文
byte[] buff = Encoding.GetEncoding("GBK").GetBytes("緥2");
string strs=Encoding.Unicode.GetString(buff);
你这里的“緥”和“Km”,估计是强制转换出来的,本来的编码可能是两个字节表示一个文字的,给你硬邦邦的拆成了两个字符"Km"出来的。是这样吗?
我举例更正:
byte[] buff = Encoding.GetEncoding("GBK").GetBytes("緥");
string strs=Encoding.Unicode.GetString(buff);
//输出的strs是设byte[] buff = Encoding.GetEncoding("GBK").GetBytes("Km");
string strs=Encoding.Unicode.GetString(buff);
//输出的strs是测
var strs = Encoding.GetEncoding("GBK").GetString(buffer);
至于说你怎么会曲折地去整出“緥2”来,我觉得这本身就是很诡异的事情。你从文件或者网络上读取到的GBK数据,不是byte[]形式的么?你的哪一种应用程序会得到“緥2”这个东西出来?
1、对方测试程序,输入“设”,发送,我方程序,接收到的原始字符串是“緥”,经过转换是设;
2、对方测试程序,输入“测”,发送,我方程序,接收到的原始字符串是“Km”,经过转换是测;
3、对方测试程序,输入“测试”,发送,我方程序,接收到的原始字符串是“Km諎”,经过转换是测试;
4、对方测试程序,输入“测1”,发送,我方程序,接收到的原始字符串是“Km1”,经过转换是测口;
var data = Encoding.GetEncoding("GBK").GetBytes(s);
var result = Encoding.GetEncoding("GBK").GetString(data);这样才是和逻辑的。首先第二行代码把unicode转gbk,然后第三行代码把gbk转为unicode。而你的代码,先把unicode转为gbk,接下来就不认buff中是gbk、反而认为它是unicode编码的,这自然就会出错。对方以什么编码“发送”,我方以什么编码“接收”?
string strs=Encoding.Unicode.GetString(buff);
如果收到的纯中文,这个代码转换后是正确的。如果带数字或字母,数字或字母转换不了