`
yyyyy5101
  • 浏览: 151517 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

关于乱码的问题

阅读更多
自从以前学习JSP开始,中文乱码问题就一直不断,苦不堪言,我们要解决的第一个问题就是把mysql的中文乱码问题搞定。经过多天的努力,终于成功的解决了中文乱码问题,特写在这里,以备后用。 软件及环境:Windows XP(2000), j2sdk1.5, Tomcat 5.0.25, mysql 5.0驱动为mysql-connector-java-3.1.4-beta-bin.jar。

目标:在该环境下,实现中文的正常显示,读取与插入数据库。

注:我只在此环境下测试通过,别的系统及不同版本未测试

要点:统一字符集(JSP页面编码,mysql建库时字符集选择,连接数据库URL,request设定等)

下面我以GBK为例讲解。如果要使用utf-8,只要在相应的GBK处换成utf-8即可

————————— 步骤1 以GBK字符集建库建表 ————————————-

建库时,从菜单中选create Database…新建一个数据库,CharacterSet选gbk_bin(另一个gbk_chinese_ci不知道与这个有什么区别,我找资料也没有找到。如果你知道,请告诉我,我补充在这里)。不要把工具栏上有一个加号和数据库模样的图标当成新建数据库了,那个新注册一个已经存在的数据库。
后面建表时,也要选择同样的字符集。

建好后,此时不要用管理器向里面插入数据,否则你看到的中文依然是乱码。

————————— 步骤2 连接数据库的URL后加些参数 ——————————-

假设我新建的数据库是testdb,那么我连接数据库的url应该为:

jdbc:mysql://localhost:3306/testdb?useUnicode=true&characterEncoding=gbk

此时要注意:如果我是把这个url写在JAVA代码中,就直接这样写。但如果是在xml配置文件中(如struts-config.xml,web.xml等),要把其中的&改为&才行,否则会出错。也就是:

jdbc:mysql://localhost:3306/testdb?useUnicode=true&characterEncoding=gbk

————————— 步骤3 每个JSP页面都要声明该中文字符集 —————————-

在每个JSP页面的最上面都加上一句

<%@ page language=”java” contentType=”text/html;charset=GBK” %>

这样才能保证JSP页面中的中文显示正常

————————— 步骤4 加一个传递参数时设定request字符集的filter类 ———————–

因为网络中字符在传递的时候,都是统一以iso-8859-1的编码传递,所以我们必须对request重新设定字符集,才能正常显示中文。如果采用filter类来实现,我们不用在每次取中文参数时都要重新设定。

filter类的内容:


package com.strutsLogin.util;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;


public class SetCharacterEncodingFilter implements Filter {

protected String encoding = null;
protected FilterConfig filterConfig = null;
protected boolean ignore = true;
public void destroy() {

this.encoding = null;
this.filterConfig = null;

}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {

if (ignore || (request.getCharacterEncoding() == null)) {
String encoding = selectEncoding(request);
if (encoding != null)
request.setCharacterEncoding(encoding);
}

// Pass control on to the next filter
chain.doFilter(request, response);

}
public void init(FilterConfig filterConfig) throws ServletException {

this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
String value = filterConfig.getInitParameter("ignore");
if (value == null)
this.ignore = true;
else if (value.equalsIgnoreCase("true"))
this.ignore = true;
else if (value.equalsIgnoreCase("yes"))
this.ignore = true;
else
this.ignore = false;

}
protected String selectEncoding(ServletRequest request) {

return (this.encoding);

}

}
该代码来自于www.javawebstudio.com,特此感谢!

然后我们在web.xml中加一些配置,就可以了,配置如下:

<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>javawebstudio.struts_db.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
<init-param>
<param-name>ignore</param-name>
<param-value>true</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<servlet-name>action</servlet-name>
</filter-mapping>

放在web.xml的合适位置。一般在最后,<jsp-config>标签之前(如果有的话)

经过以上步骤,JSP和mysql的中文显示及插入就都正常了。在STRUTS中也正常。

但是,此时如果你用EMS或mysql的命令行控制台来看表中的数据,却发现它们都是????。这是怎么回事呢?

不用担心,只要我们运行下面的这几行命令,就能看到正常的中文了!

SET character_set_client = gbk;
SET character_set_connection = gbk;
SET character_set_database = gbk;
SET character_set_results = gbk;
SET character_set_server = gbk;

SET collation_connection = gbk_bin;
SET collation_database = gbk_bin;
SET collation_server = gbk_bin;

如果你用的是mysql的命令行,则直接输入就好。

如果是EMS,则在工具栏中有一个Show SQL Editor按钮,点一下,把上面的命令输入,再按一个”execute”的按钮,就行了!

而且在这种情况下,你可以甚至可以用中文名来建数据库,表名和字段名!!!!

—————————————————————————————————-

但是有一点要特别注意!

像GBK,UTF-8这样的名字,在mysql与JAVA中有不同的规定,写的时候要格外注意,否则会出错。

比如GBK,在JAVA中要写成GBK,但在mysql中要写成gbk(连接数据库的URL)

比如UTF-8,在JAVA中要写成UTF-8,但在Mysql中要写成utf8

其它的字集符也有类似的区别

其实之前的问题我都解决了,最后失败在一个&符号上,以后要记得了,凡是在url里面的&都最好写成&amp;,这下总算明白了xhtml标准中为什么这么规定了. 在web中,&因为是用来做转义的,所以有可能出错。
分享到:
评论

相关推荐

    乱码问题的解决

    "乱码问题的解决" 在 Web 开发中,乱码问题是常见的难题之一。乱码问题的出现主要是由于编码不一致引起的。编码不一致可能出现在多个方面,如页面编码、服务器编码、客户端编码、数据库编码等。在本文中,我们将...

    ffmpeg.exe在windows修正乱码,命令行支持中文字幕文件名

    首先,关于乱码问题,这通常是因为FFmpeg在Windows上默认不支持Unicode编码,尤其是在命令行环境下,可能会对非ASCII字符(如中文字符)处理不当。为了解决这个问题,开发者可能对FFmpeg进行了编译配置修改,使其...

    解决JSP中文乱码问题

    解决 JSP 中文乱码问题 解决 JSP 中文乱码问题是一个很常见的问题,在 JSP 开发过程中,经常出现中文乱码的问题,可能一至困扰着大家。下面我们将详细讨论 JSP 中文乱码问题的成因和解决方法。 JSP 中文乱码问题的...

    qt乱码问题解决

    qt乱码问题解决

    中文乱码问题分析 自己总结的

    中文乱码问题分析 中文乱码问题是 Java 和 JSP 开发中的一种常见问题,主要是由于 Java 和 JSP 源文件的保存方式是基于字节流的,而编译成 class 文件过程中,使用的编码方式与源文件的编码不一致所致。在 Java ...

    乱码解决 乱码解决 乱码解决 乱码解决 乱码解决

    在IT领域,乱码问题是一个常见的困扰,尤其是在处理文本数据时。乱码通常指的是字符显示不正确或无法识别,这可能由于编码格式不匹配、文件损坏、程序设置不当等原因引起。下面将详细讨论乱码产生的原因、解决方案...

    润乾报表乱码问题

    在信息技术领域,乱码问题是指字符在计算机中由于编码不一致或者不正确而导致的显示错误,通常表现为无法识别的特殊符号或者乱糟糟的方块。润乾报表乱码问题尤其令人头疼,因为它影响了数据的显示和传输,尤其是对于...

    FORM表单中文乱码问题分析与解决

    FORM表单中文乱码问题分析与解决 在 Web 开发中,中文乱码问题是一个常见的问题,尤其是在FORM表单传递参数时。这个问题的根本原因是对中文的编码与解码方式不一致。我们可以理解为对中文的加密与解密的密钥不一致...

    hadoop中文乱码问题

    【Hadoop中文乱码问题详解】 在大数据处理领域,Hadoop是一个不可或缺的开源框架,它提供了分布式存储(HDFS)和分布式计算(MapReduce)的能力。然而,在处理包含中文字符的数据时,用户可能会遇到中文乱码的问题...

    设置乱码问题(设置乱码问题)

    ### 设置乱码问题详解 #### 一、理解乱码问题 在进行数据库操作时,可能会遇到数据呈现为不可读字符的现象,这种情况通常被称为“乱码”。出现乱码的原因多种多样,比如字符集设置不一致、编码转换错误等。解决...

    js出现乱码问题介绍大全

    ### JS出现乱码问题介绍大全 #### 一、引言 在Web开发中,字符编码问题经常困扰开发者,特别是当涉及到不同语言环境时。JavaScript作为前端开发的核心技术之一,在处理字符编码方面同样会遇到各种各样的乱码问题。...

    解决中文乱码问题

    "解决中文乱码问题" 在Java编程中,中文乱码是一个常见的问题。为了解决这个问题,我们需要从多个方面入手。首先,我们需要将Eclipse的编码方式设置为UTF-8,以便正确地显示中文字符。其次,我们需要在浏览器中将...

    解决Ubuntu和Windows的文件乱码问题

    本文详细介绍了如何解决Ubuntu和Windows在处理文件时发生的乱码问题。 首先,我们需要了解文件乱码的原因。Windows系统中的许多纯文本文件(包括压缩文件)默认使用GBK编码,这是一种针对中文字符的扩展字符集。当...

    Java关于中文乱码问题的多种解决方法

    在Java编程中,中文乱码问题是一个常见的困扰,尤其是在处理文件读写、网络传输或数据库操作时。本文将深入探讨几种解决Java中中文乱码问题的方法,并以MyEclipse为开发环境,结合实际示例进行讲解。 1. 文件读写中...

    JAVA 乱码问题集合

    在Java编程中,乱码问题是一个常见的困扰,尤其是在处理字符编码时。以下是一些关键的知识点,可以帮助理解和解决Java中的乱码问题。 首先,我们需要理解字符编码的基本概念。字符编码是用来表示文本的一种方式,...

    mysql中文乱码问题

    MySQL 中文乱码问题解决方法 MySQL 是一个功能强大且广泛应用的关系型数据库管理系统,但是,在使用 MySQL 时,用户经常会遇到中文乱码问题。今天,我们将讨论在 MySQL 中的中文乱码问题,并提供解决方法。 MySQL...

    springboot乱码问题解决方案

    SpringBoot乱码问题解决方案 SpringBoot框架是一款流行的Java Web开发框架,但是在实际开发中,开发者经常会遇到乱码问题,导致项目无法正常运行。为了解决这个问题,本文将详细介绍SpringBoot乱码问题解决方案,并...

    解决linux下oracle中文乱码问题,添加中文支持

    解决linux下oracle中文乱码问题,添加中文支持解决linux下oracle中文乱码问题,添加中文支持解决linux下oracle中文乱码问题,添加中文支持解决linux下oracle中文乱码问题,添加中文支持解决linux下oracle中文乱码...

    Netty进制转换乱码问题

    在使用Netty进行TCP/IP通信时,我们可能会遇到数据进制转换导致的乱码问题。这个问题通常是由于数据编码不一致或者处理方式不当所引起的。在本文中,我们将深入探讨Netty中的进制转换和字符编码,并提供解决方案。 ...

    Java开发乱码问题解决方法汇总

    Java开发乱码问题解决方法汇总 Java开发中乱码问题是非常常见的问题之一,而解决这些问题需要具备一定的技术知识和经验。在本文中,我们将总结一些常见的Java开发乱码问题解决方法,希望能够为读者提供帮助。 1. ...

Global site tag (gtag.js) - Google Analytics