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你,但是运行结果却是
请各位看看是不是哪里设置出了问题
检查下是否是使用了gb2312d问题。
不是
@gongsainan: 然后,检查下长度7,截取为字节之后,应该用byte[].length。中文不应该只占1个位的。
@幻天芒: 中文是占两个字节的
@gongsainan: 那你的参数也不应该为7啊~
@幻天芒: 跟参数有什么关系呢?如果是汉字的前半部分,就截取掉,后半部分就输出
@gongsainan: 为7貌似会被截断啊~~~
很明显啊!你将 byte[] bytes = str.getBytes("gb2312");
Myeclipse你不是设置utf-8嘛!
你文件里的文字编码和你的java文件的编码是一样的。
也就是说:在你的例子里,“abcd你好啊”用的是utf-8编码,你getBytes时,是取的gb2312,此处不统一。
修正方法:
将你的java文件的属性,修改为gb2312编码,就好了。修改完编码,java文件里的“你好啊”可能要重新输入。
补充说明一点:gb2312一个汉语文字的编码,占用两个字节,utf-8占用3个字节。
@在大地画满窗子: 貌似跟这没有关系,拿到命令行里去运行,就能正确显示
@gongsainan: 命令行里当然可以。确诊,就是这个问题
终于找到答案了,代码并没有错,而是run configuations中控制台的编码格式的设置问题,只要将其设为GBK就可以了
控制台的编码格式,默认是继承文件的编码的。
@在大地画满窗子: 这个还是要看myeclipse的版本的,老版本不一定是继承下来的哟