中文乱码总结出现的原因及解决方法,包括数据库乱码
中文乱码是一个常见的问题,它可能出现在 Java 和 JSP 文件中,也可能出现在 Java 程序与其他媒介交互时。以下是中文乱码的原因和解决方法:
Java 和 JSP 文件本身编译时产生的乱码问题
Java 和 JSP 源文件中可能包含中文,而 Java 和 JSP 源文件的保存方式是基于字节流的。如果 Java 和 JSP 编译成 class 文件过程中,使用的编码方式与源文件的编码不一致,就会出现乱码。解决方法是,在 Java 文件中尽量不要写中文(注释部分不参与编译,写中文没问题),如果必须写的话,尽量手动带参数-ecoding GBK 或-ecoding gb2312 编译(用 Eclipse 开发,修改一下编码就 OK 了);对于 JSP,在文件头加上 <%@ page contentType="text/html;charset=GBK"%> 或<%@ page contentType="text/html;charset=gb2312"%>基本上就能解决这类乱码问题。
Java 程序与其他存储媒介交互产生的乱码
Java 程序与其他存储媒介交互时,可能会出现乱码,例如 Java 程序与数据库、文件、流等交互时。解决方法是,保持编码的一致性。在 JSP 中,可以使用 request.setCharacterEncoding("GBK") 或 request.setCharacterEncoding("gb2312") 来指定编码方式。在 Java 与数据库交互时,可以在驱动的 url 参数中指定编码方式,例如 jdbc:mysql://localhost/WEBCLDB?useUnicode=true&characterEncoding=GBK。
JSP 与页面参数之间的乱码
JSP 获取页面参数时一般采用系统默认的编码方式,如果页面参数的编码类型和系统默认的编码类型不一致,很可能就会出现乱码。解决方法是在页面获取参数之前,强制指定 request 获取参数的编码方式:request.setCharacterEncoding("GBK") 或 request.setCharacterEncoding("gb2312") 。
Java 与数据库之间的乱码
Java 和数据库交互时也要保持编码的一致性。可以在驱动的 url 参数中指定编码方式,例如 jdbc:mysql://localhost/WEBCLDB?useUnicode=true&characterEncoding=GBK。在创建数据库时,可以指定编码方式,例如 CREATE DATABASE ms_db CHARACTER SET utf8 COLLATE utf8_general_ci。
Java 与文件/流之间的乱码
Java 读写文件最常用的类是 FileInputStream/FileOutputStream 和 FileReader/FileWriter。其中 FileInputStream 和 FileOutputStream 是基于字节流的,常用于读写二进制文件。读写字符文件建议使用基于字符的 FileReader 和 FileWriter。
中文乱码的解决方法需要考虑多方面的因素,包括 Java 和 JSP 文件本身的编译、Java 程序与其他存储媒介交互、JSP 与页面参数之间的交互、Java 与数据库之间的交互、Java 与文件/流之间的交互等。通过保持编码的一致性和正确地指定编码方式,可以避免中文乱码的问题。