1.java源文件中字符串内容的编码
java源文件中字符串的编码跟文件的编码一致,可以在eclipse中查看和修改源文件的编码;如果.java为utf8编码格式,那么默认的getBytes得到的字节流的编码格式为utf8格式;如果以getBytes("编码格式")的到的字节流的编码便为该编码格式。
然后通过new String(bytes,"编码格式")可以得到新的编码格式的字符串,不过这里的编码格式必须和字节流的编码格式一致。
2.java读取(字节流)文件中的内容&编码
java通过字节形式读取文件内容,如果想要打印输出,就会涉及到中文乱码问题,这时,如果将字节流转换为字符串,需使用文件的编码格式转换,即new String(bytes,"编码格式"),然后可无乱码打印文件内容。
3.java编码转换
如果java将字节转为字符串,默认的编码格式为java源文件的编码格式,如果字节流的编码格式不为java源文件的编码格式,则主动设置编码为字节流的编码才可得到正确编码的字符串。 可将正确格式的字符串转换编码为其他格式,比如将当前gbk编码的字符串转换为utf-8编码的字符串<new String(s.getBytes("utf-8"),"utf-8")>.
4. 以上总结在理解上存在一些问题,在我重新查阅资料,精心研究之后重新总结,因为前面的总结也有参考意义,所以就不删了。
5. 所谓编码转换
java的字符串都是以unicode编码的,编码是将字符转成字节的过程,utf-8编码是将字符串以utf-8的形式变成字节流,那么,将字节流转回原来的unicode码;于是,如果utf8编码的字节被误以为是gbk而以gbk方式解码,那么得到的unicode码就会和之前不一样,所以就产生了乱码,在这个意义上将,所有编码转换的说法时不准确的,我们要做的就是让程序不要将一种编码误认为是另一种编码解读,编码解码的过程唯一要做的就是:保持前后unicode码是一致的!unicode码是java默认编码(关于unicode码和utf-8的区别请另参阅资料)。所有的乱码都是因为将A编码误以为是B编码做了解码,在这个前提下,就很容易避免乱码的产生。
6.编码转换公式
经过本人实际的测试,得到了关于编码转换的一个“公式”,可以拿来做做参考。
<1> Unicode码守恒原则, 一个String的从开始到最后,它的编码要保持是它产生时的默认编码,如果是在java源文件中,那么它的默认编码方式就是java文件的编码,如果是从文件中产生,那么它的编码方式就是文件的编码,事实上,在这个过程中,它本身的编码是什么不要紧,它都是unicode码。
<2> 编码&乘法。 如果将String编码为一种格式编码的字节流,那么在原本编码基础上×当前编码方式
<3> 解码&除法。如果将bytes解码为String,那么在已有公式上÷当前解码方式
<4> 约分法则。 将整个过程中编码产生的乘法与解码产生的除法使用约分,分子分母相消,得出最终编码。然后参考<1>