首页新闻找找看学习计划

不同系统编码问题

0
[待解决问题]

最近遇到一个问题

在我将byte[]类型转换成string时,使用了encoding.default.getstring(arr)方法

在xp中文系统中,获得的返回值是正常的,而且编码为 gb2312

在win7旗舰版sp1系统中,结果和在xp系统中一样正常

可是在win7中文专业版系统中,返回的却是一连串的 EEEEEE.....,系统编码为gb2312正常

不知原因是什么。。。。。。

飞鼠的主页 飞鼠 | 菜鸟二级 | 园豆:201
提问于:2014-10-04 10:40
< >
分享
所有回答(4)
0

出现这种情况,只能跟编码有关,如果编码都是gb2312,那么不应该返回这个内容。

或者,你确认下,你的arr是否都是一致的呢?

519740105 | 园豆:5810 (大侠五级) | 2014-10-04 11:52

arr是一致的

支持(0) 反对(0) 飞鼠 | 园豆:201 (菜鸟二级) | 2014-10-04 12:15

@飞鼠: 强制使用GB2312编码呢?比如Encoding.Default.GetEncoding("gb2312")

支持(0) 反对(0) 519740105 | 园豆:5810 (大侠五级) | 2014-10-04 14:44
0

每天回答前5个问题奖励2园豆。

爱编程的大叔 | 园豆:30267 (高人七级) | 2014-10-04 12:03
0

encoding.default调用的是系统默认编码。不一样的系统自然会有不一样的编码

你既然知道是编码差异了。为什么不指定编码?这是什么意思?

吴瑞祥 | 园豆:28770 (高人七级) | 2014-10-04 20:23

指定编码也是一样,我循环将每种编码的结果都输出来,在win7专业版下,没有一种是显示正常的

支持(0) 反对(0) 飞鼠 | 园豆:201 (菜鸟二级) | 2014-10-08 09:51
0

你描述的问题是不是这样,请看代码:

string str1 = "中文";

byte[] buff = Encoding.GetEncoding("GB2312").GetBytes(str1);

string str2 = Encoding.GetEncoding("GB2312").GetString(buff);

在xp中文系统和win7旗舰版sp1系统中, str2 的值为“中文”;而在win7中文专业版系统中 str2 的值为“EEEEE....”,是这样的吗?

Launcher | 园豆:45040 (高人七级) | 2014-10-08 11:27

是这样的,只不过我这边的byte[] 值是从其他系统中取出来的,在xp系统中转换成string正常,在win7专业版中就显示为很多的E

支持(0) 反对(0) 飞鼠 | 园豆:201 (菜鸟二级) | 2014-10-08 11:30

@飞鼠: “只不过我这边的byte[] 值是从其他系统中取出来的” 请注意你这句话跟我贴的代码的差异,请确认你从其他系统取出来的 byte[] 的编码形式。

支持(0) 反对(0) Launcher | 园豆:45040 (高人七级) | 2014-10-08 11:45

@Launcher: 

确认是gb2312的,让我不明白的是:在xp中转换正常,在win7中文专业版中就是不行呢,

而且在win7中,我循环使用所有的编码格式取值,没有一种能够转换成功,这与系统中什么方面有关?

字体?。。。。

支持(0) 反对(0) 飞鼠 | 园豆:201 (菜鸟二级) | 2014-10-09 16:12

@飞鼠: 你有把这段代码:

string str1 = "中文";

byte[] buff = Encoding.GetEncoding("GB2312").GetBytes(str1);

string str2 = Encoding.GetEncoding("GB2312").GetString(buff);

写在 Console 程序中去测试过吗?

支持(0) 反对(0) Launcher | 园豆:45040 (高人七级) | 2014-10-09 16:39

@Launcher: 

这段代码运行正常

 

支持(0) 反对(0) 飞鼠 | 园豆:201 (菜鸟二级) | 2014-10-09 17:58

@飞鼠: 如果这段代码运行正常,你是不是就该去看看你从其他系统取出的 byte[] 的编码是不是正确呢?

支持(0) 反对(0) Launcher | 园豆:45040 (高人七级) | 2014-10-09 17:59

@Launcher: 

为何我在xp中运行正常呢,既然这里正常,难道不能认为返回的byte[]编码是没有问题的?

byte[]值是从医保那边返回过来的,我问医保那边,他们说是gb2312的

支持(0) 反对(0) 飞鼠 | 园豆:201 (菜鸟二级) | 2014-10-09 18:17

@飞鼠: 我假设你从医保那边接收到的字符串应该是“医保”,那么按照 GB2312 编码,医保系统返回给你的字节数组应该是:{0xd2,0xbd,0xb1,0xa3},那么,当我们使用 GB2312 编码将其转换为字符串时,它的结果应该是“医保”。因此,请你对比在 xp 和 win7 下,医保返回同一个字符串的字节数组的值是否一致?

支持(0) 反对(0) Launcher | 园豆:45040 (高人七级) | 2014-10-10 09:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册