java中怎么比较utf-8编码的字符串和ascii编码字符串

hgfgoodcreate 发布于 2016/05/01 12:58
阅读 795
收藏 0

从一个utf-8编码的文本文件中读出的“quit”编码是:[-17, -69, -65, 113, 117, 105, 116]

但是直接在java程序源文件使用的“quit”的编码是[113, 117, 105, 116],

在使用a.equal(b)时,不能判断他俩相等。这个应该怎么判断呢~

加载中
0
trayvon
trayvon

      可以不使用按字节读取的方式,自己按字节读取UTF-8文件,需要处理UTF-8的BOM(字节顺序标记(Byte Order Mark)),而BOM可能是有的,可能是没有的。

     你的文本文件是有BOM的,UTF-8的BOM是EF BB BF 这是3个字节,EF的二进制是11101111(8位)。把这个字节按整型输出,最高位是1,所以是负数,负数存放的是补码:所以原码是10010001,所以是-17,BB BF也一样。quit都在ASCII字符集中,所以占用1个字节。同理输出的是对应编码的整型数字。

你可以使用读取字符串的方式读入,然后在来比较,例如:

FileReader fileReader = new FileReader("F:\\tmp\\t.txt");

BufferedReader reader = new BufferedReader(fileReader);
String content = reader.readLine();

hgfgoodcreate
hgfgoodcreate
谢谢。其嗯手下我的大拇指~
1
Sel8616
Sel8616

编码不一样,你还想直接比较!!

当然要转换成一样的编码再比啊

1
Feng_Yu
Feng_Yu
强制转成unicode之后再比啊
0
一碗粥
一碗粥

这个应该不是编码的问题, 你从文本文件中读出来的东西肯定不止是‘quit‘, 因为‘quit‘的ascii或utf8就是[113,117,105,116]. 你从文本文件中读出来的[-17, -69, -65]应该是异常,不论是ascii,还是unicode都不包含负数的编码值。 

ascii: 0~127

utf8: 0~0x10ffff

0
zabcd117
zabcd117
utf8文件前三个字节是标志位EF BB BF
hgfgoodcreate
hgfgoodcreate
恩恩,有没有处理标志位的方法呢?我把ascii码转为utf-8,但是它就没有这个标志位。。。
0
pantrick
pantrick
哈哈,如楼上所说,所有的utf8 英文字符前面估计都那三个字符串,现在你明白了吧,多简单的规律了
0
xpbob
xpbob
这个java做了 处理的,只要你能编码在java中显示正确,那么他会自动转化为UTF-16的,假如你知道byte数组,调用new String(byte[],charcode)此处charcode就是UTF-8等等,至于能写几种编码格式,取决与你的系统能支持多少种,一旦获取到string对象,只要不是乱码,说明转化成功了。然后此时的编码格式已经是unicode了,现在你就可以用这个对象去比较了。
返回顶部
顶部