java乱码

乱码的产生

      java系统的输入和输出、以及操作系统3者之间的编码格式决定的。

乱码问题的由来

      Java的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,与此同时便出现了中文乱码的问题。

如果java和本身编译的class文件的编码格式不统一可能会出现乱码问题。

java程序与数据库、文件、流的存储方式都是基于字节流的,因此java与这些媒介交互时便会发生字符(chart)与字节(byte)之间的转换,具体情况如下:

      从页面form提交数据到java程序 byte->char
      从java程序到页面显示 char?>byte

      从数据库到java程序 byte?>char
      从java程序到数据库 char?>byte

      从文件到java程序 byte->char
      从java程序到文件 char->byte

      从流到java程序 byte->char
      从java程序到流 char->byte

如果在以上转换过程中使用的编码方式与字节原有的编码不一致,很可能就会出现乱码。

  

1、java与数据库之间的乱码

大部分数据库都支持以unicode编码方式。如SQLSERVER

部分数据库可以在驱动的url中加入:如

      mysql驱动:jdbc:mysql://localhost/WEBCLDB?useUnicode=true&characterEncoding=GBK。

2、java与文件/流之间的乱码

     Java读写文件最常用的类是FileInputStream/FileOutputStream和FileReader/FileWriter。其中FileInputStream
和FileOutputStream是基于字节流的,常用于读写二进制文件。读写字符文件建议使用基于字符的FileReader和FileWriter,省去了字节与字符之间的转换。但这两个类的构造函数默认使用系统的编码方式,如果文件内容与系统编码方式不一致,可能会出现乱码。
在这种情况下,建议使用FileReader和FileWriter的父类:
InputStreamReader/OutputStreamWriter,它们也是基于字符的,但在构造函数中可以指定编码类型:
InputStreamReader(InputStream in, Charset cs) 和OutputStreamWriter(OutputStream out, Charset cs)。

3、其他

     上面提到的方法应该能解决大部分乱码问题,如果在其他地方还出现乱码,可能需要手动修改代码。解决Java乱码问题的关键在于在字节与字符的转换过程中。

你可能感兴趣的:(java)