文件的编码问题,一直很头疼,现在终于解决了。
要想正确打开文件,首先要知道文件的字符集(CharaterSet),其次是要知道这种字符集是用什么编码(encode)来存储的,然后用对应的Java方法打开,这样就能正确的打开文件,而不出现乱码。
1.文件的字符集在Windows下有两种,一种是ANSI,一种Unicode。对于Unicode,Windows支持了它的三种编码方式,一种是小尾编码,一种是大尾编码,一种是UTF-8编码。怎么区分一个文件是属于哪种编码?从文件的头部区分,当头部的两个字节为 FF FE时,这是Unicode的小尾编码,当它为FE FF时,这是Unicode的大尾编码,当它为EF BB BF时,这是Unicode的UTF-8编码,当它不为这些时,这是ANSI编码。
2.从程序角度出发,实际上只要知道头一个字节的值,就能区分它是属于哪种字符集,哪种编码。
3.对于大、小尾码,用inReader = new InputStreamReader(inStreamfile1, "unicode");
对于UTF-8码,用inReader = new InputStreamReader(inStreamfile1, "utf-8");
对于ANSI集,用inReader = new InputStreamReader(inStreamfile1);