首页 新闻 会员 周边

好诡异,myeclipse乱码

0
悬赏园豆:50 [已关闭问题] 关闭于 2013-06-25 17:01

Myeclipse中workspace编码格式为UTF-8
代码1:a.txt的编码也是UTF-8
FileReader fr = new FileReader("src/a.txt");

char[] buffer = new char[10];

int len = fr.read(buffer);

System.out.println(new String(buffer,0,len));
结果:txt文件中的汉字并没有出现乱码
代码2:
public static void main(String[] args) throws UnsupportedEncodingException {

String str = "abcd你好啊";

byte[] bytes = str.getBytes("gb2312");

int len = 7;
decode(bytes,len);
}

private static void decode(byte[] bytes, int len) {

int count = 0;
for(int i=0; i<len; i++){
if(bytes[i]<0)
count++;
}
if(count%2==1)
len--;
String str = new String(bytes,0,len);

System.out.println(str);
}
}
结果应该是abcd你,但是运行结果却是
请各位看看是不是哪里设置出了问题

问题补充:

终于找到答案了,代码并没有错,而是run configuations中控制台的编码格式的设置问题,只要将其设为GBK就可以了

gongsainan的主页 gongsainan | 初学一级 | 园豆:158
提问于:2013-06-25 13:02
< >
分享
所有回答(4)
0

检查下是否是使用了gb2312d问题。

幻天芒 | 园豆:37175 (高人七级) | 2013-06-25 13:11

不是

支持(0) 反对(0) gongsainan | 园豆:158 (初学一级) | 2013-06-25 13:12

@gongsainan: 然后,检查下长度7,截取为字节之后,应该用byte[].length。中文不应该只占1个位的。

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2013-06-25 13:17

@幻天芒: 中文是占两个字节的

支持(0) 反对(0) gongsainan | 园豆:158 (初学一级) | 2013-06-25 14:33

@gongsainan: 那你的参数也不应该为7啊~

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2013-06-25 15:57

@幻天芒: 跟参数有什么关系呢?如果是汉字的前半部分,就截取掉,后半部分就输出

支持(0) 反对(0) gongsainan | 园豆:158 (初学一级) | 2013-06-25 16:06

@gongsainan: 为7貌似会被截断啊~~~

支持(0) 反对(0) 幻天芒 | 园豆:37175 (高人七级) | 2013-06-25 17:01
0

很明显啊!你将 byte[] bytes = str.getBytes("gb2312");

Myeclipse你不是设置utf-8嘛!

Beyond-bit | 园豆:2885 (老鸟四级) | 2013-06-25 13:14
0

你文件里的文字编码和你的java文件的编码是一样的。

也就是说:在你的例子里,“abcd你好啊”用的是utf-8编码,你getBytes时,是取的gb2312,此处不统一。

修正方法:

  将你的java文件的属性,修改为gb2312编码,就好了。修改完编码,java文件里的“你好啊”可能要重新输入。

在大地画满窗子 | 园豆:102 (初学一级) | 2013-06-25 13:22

补充说明一点:gb2312一个汉语文字的编码,占用两个字节,utf-8占用3个字节。

支持(0) 反对(0) 在大地画满窗子 | 园豆:102 (初学一级) | 2013-06-25 13:23

@在大地画满窗子: 貌似跟这没有关系,拿到命令行里去运行,就能正确显示

支持(0) 反对(0) gongsainan | 园豆:158 (初学一级) | 2013-06-25 14:41

@gongsainan: 命令行里当然可以。确诊,就是这个问题

支持(0) 反对(0) 在大地画满窗子 | 园豆:102 (初学一级) | 2013-06-25 16:52
0

终于找到答案了,代码并没有错,而是run configuations中控制台的编码格式的设置问题,只要将其设为GBK就可以了

gongsainan | 园豆:158 (初学一级) | 2013-06-25 17:00

控制台的编码格式,默认是继承文件的编码的。

支持(0) 反对(0) 在大地画满窗子 | 园豆:102 (初学一级) | 2013-06-25 21:12

@在大地画满窗子: 这个还是要看myeclipse的版本的,老版本不一定是继承下来的哟

支持(0) 反对(0) gongsainan | 园豆:158 (初学一级) | 2013-06-25 21:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册