最近遇到一个问题
在我将byte[]类型转换成string时,使用了encoding.default.getstring(arr)方法
在xp中文系统中,获得的返回值是正常的,而且编码为 gb2312
在win7旗舰版sp1系统中,结果和在xp系统中一样正常
可是在win7中文专业版系统中,返回的却是一连串的 EEEEEE.....,系统编码为gb2312正常
不知原因是什么。。。。。。
出现这种情况,只能跟编码有关,如果编码都是gb2312,那么不应该返回这个内容。
或者,你确认下,你的arr是否都是一致的呢?
arr是一致的
@飞鼠: 强制使用GB2312编码呢?比如Encoding.Default.GetEncoding("gb2312")
每天回答前5个问题奖励2园豆。
encoding.default调用的是系统默认编码。不一样的系统自然会有不一样的编码
你既然知道是编码差异了。为什么不指定编码?这是什么意思?
指定编码也是一样,我循环将每种编码的结果都输出来,在win7专业版下,没有一种是显示正常的
你描述的问题是不是这样,请看代码:
string str1 = "中文";
byte[] buff = Encoding.GetEncoding("GB2312").GetBytes(str1);
string str2 = Encoding.GetEncoding("GB2312").GetString(buff);
在xp中文系统和win7旗舰版sp1系统中, str2 的值为“中文”;而在win7中文专业版系统中 str2 的值为“EEEEE....”,是这样的吗?
是这样的,只不过我这边的byte[] 值是从其他系统中取出来的,在xp系统中转换成string正常,在win7专业版中就显示为很多的E
@飞鼠: “只不过我这边的byte[] 值是从其他系统中取出来的” 请注意你这句话跟我贴的代码的差异,请确认你从其他系统取出来的 byte[] 的编码形式。
@Launcher:
确认是gb2312的,让我不明白的是:在xp中转换正常,在win7中文专业版中就是不行呢,
而且在win7中,我循环使用所有的编码格式取值,没有一种能够转换成功,这与系统中什么方面有关?
字体?。。。。
@飞鼠: 你有把这段代码:
string str1 = "中文";
byte[] buff = Encoding.GetEncoding("GB2312").GetBytes(str1);
string str2 = Encoding.GetEncoding("GB2312").GetString(buff);
写在 Console 程序中去测试过吗?
@Launcher:
这段代码运行正常
@飞鼠: 如果这段代码运行正常,你是不是就该去看看你从其他系统取出的 byte[] 的编码是不是正确呢?
@Launcher:
为何我在xp中运行正常呢,既然这里正常,难道不能认为返回的byte[]编码是没有问题的?
byte[]值是从医保那边返回过来的,我问医保那边,他们说是gb2312的
@飞鼠: 我假设你从医保那边接收到的字符串应该是“医保”,那么按照 GB2312 编码,医保系统返回给你的字节数组应该是:{0xd2,0xbd,0xb1,0xa3},那么,当我们使用 GB2312 编码将其转换为字符串时,它的结果应该是“医保”。因此,请你对比在 xp 和 win7 下,医保返回同一个字符串的字节数组的值是否一致?