`
snoopy3384
  • 浏览: 12870 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论
阅读更多
在开发中,总会碰到各种中文乱码问题,下面稍作总结。

1、数据库的乱码

出现乱码问题,我们第一反应应该是:是否数据库字符编码设置有问题。以mysql为例,装好mysql后进入安装目录,打开my.ini配置文件查看mysql设置的编码。在my.ini中有两处设置字符编码的地方,分别是[mysql]下的default-character-set及[mysqld]下的default-character-set。熟悉linux的朋友都知道以d结尾的表示服务端,如你想那样,[mysql]设置的字符编码是客户端的,[mysqld]设置的字符编码是mysql服务器端的编码。我们的数据就是存储在mysql服务器端的,为了能存下任何字符编码的数据,我们一般设置[mysqld]下的default-character-set=utf8(注意,不是utf-8)。代表客户端的[mysql]下的default-character-set应该怎么设置呢,一般朋友可能也设置成utf8,这可能会出问题的。如果这样设置的话,当我们"运行cmd"打开DOS窗口,通过"mysql -uroot -p123"命令进入mysql的客户端后,我们是不能插入中文的。道理很简单,这是因为我们的操作系统的字符编码是GBK(或GBK兼容),我们在DOS窗口输入的中文(如:insert into test values('中文'))自然也是GBK的,而我们[mysql]设置的却是utf8,因为不兼容所以会出错。当然,如果我们使用相关mysql的GUI客户端工具,进行相关设置,即使[mysql]设置成utf8也没问题。但如果通过DOS窗口登陆mysql客户端时,一般要设置[mysql]下的default-character-set=GBK。

总结:[mysql]下default-character-set=GBK,[mysqld]下default-character-set=utf8



2、使用GET请求的乱码

如果一个请求是GET方式时,比如<a href="url">标签指定的请求如form表单以GET方式提交,我们可以在浏览器地址栏上看到类似http://localhost/proj/a.do?title=%C4%E3%BA%C3 这样的URL。像这样2个(%加上2位16进制数)表示一个中文,这是用ISO8859-1(即lantin1)进行的编码。对于这样用GET请求的URL中的中文字符,我们是不能通过设置request.setCharacterEncoding("UTF-8")来解决的。

解决方法有两种:

第一种方法是用 title = new String(title.getBytes("ISO8859-1"), "UTF-8");  来对每个有中文的请求参数进行解码再编码,这种方法比较繁琐;

第二种方法是修改tomcat的server.xml配置文件,把<Connector port="8080" ...>修改成 <Connector port="8080" ... URLEncoding="UTF-8">,即在<Connector>元素中指定其URLEncoding="UTF-8",其默认值为lantin1。这属性指定了URL的编码,设置成UTF-8后,地址栏上就不会再出现 a.do?title=%C4%E3%BA%C3 之类的内容了,而是 a.do?title=中文 。

这种方法的缺点是,其它项目或该项目其它地方可能会因为修改而引入了新的中文编码问题,比如使用这种方法之后,有些地方使用了第一种方法处理好了的中文将会再次变成乱码。这种方法不常用,可能牵一发而动全身。



3、使用POST请求的乱码

对于form表单以POST提交的请求,可以用request.setCharacterEncoding("UTF-8")来解决。至于为什么这种方法对POST请求有效而对GET请求无效,请参考HTTP协议中GET与POST请求的差别,简单来讲就是GET请求的内容放在请求头里,POST请求是放在请求体来。一般来讲我们可以通过给项目增加一个字符集过滤器来一次性解决POST请求的中文乱码。过滤器里的内容非常简单,就是调用request.setCharacterEncoding(encoding),encoding是我们要设置的字符集。过滤器可以自己编写,也可以使用spring提供的org.springframework.web.filter.CharacterEncodingFilter。



综上所述我们在中文乱码这个问题上,一般的做法如下:

1、编码集用UTF-8而不是GBK

2、给我们的应用加上一个字符集过滤器

3、所有的Form表单都以POST进行提交

4、用链接<a href="a.do?name=中文">进行的提交,最好用new String(title.getBytes("ISO8859-1"), "UTF-8")来解决而不是修改tomcat的配置文件

分享到:
评论

相关推荐

    彻底解决中文乱码的问题

    在IT行业中,尤其是在Java编程领域,中文乱码问题是一个常见的挑战。这主要涉及到字符编码的处理,涉及到Unicode、GBK、UTF-8等不同编码格式之间的转换和一致性问题。本篇文章将深入探讨这个问题,并提供一种彻底...

    c#汉字乱码处理

    在C#编程中,处理汉字乱码问题是一个常见的需求,尤其是在读取或写入文本文件时。当在C#控制台应用中遇到汉字输出乱码的情况,这通常是因为编码不匹配所导致的。编码是字符集与二进制数据之间的转换规则,不同的系统...

    使用ODBC中文乱码问题.docx

    ODBC中文乱码问题解决方案 在使用ODBC对数据库进行中文字符串插入时,经常会遇到中文字符串显示乱码的问题。本文将通过对该问题的分析和解决方案,帮助读者更好地理解ODBC中文乱码问题的成因和解决方法。 一、问题...

    Lua文件反编译汉字乱码处理

    然而,当处理含有汉字的Lua文件时,反编译过程中可能会出现汉字乱码的问题,这主要与字符编码不匹配有关。本文将详细介绍如何在C#环境下,特别是使用Visual Studio 2013时,解决Lua文件反编译后的汉字乱码问题。 ...

    express中文乱码解决

    ### Express 中文乱码解决方法 在Web开发中,尤其是使用Node.js的Express框架进行后端开发时,处理中文字符可能会遇到乱码问题。这通常是因为客户端与服务器之间的编码设置不一致导致的。本文将详细介绍如何在...

    在eclipse中中文汉字乱码的解决方案

    Eclipse 中中文汉字乱码的解决方案 Eclipse 是一个功能强大且广泛使用的集成开发环境(IDE),但是在使用过程中,用户可能会遇到中文汉字乱码的问题。本文将为大家分享解决 Eclipse 中中文汉字乱码的方案,以便大家...

    ZXing 2.1版GBK中文乱码解决办法

    ZXing 2.1版GBK中文乱码解决办法: zxing中扫瞄二维码图片,如果包含Gbk中文,乱码解决办法是修改DecodedBitStreamParser.h文件,在里面加入GBK的判断。 在2.1版本中,解码的定义不在这个类中了,挪到了...

    解决sql anywhere 11 汉字乱码问题

    在开发基于C++ Builder的...通过以上分析和步骤,你应该能够有效地解决SQL Anywhere 11中遇到的汉字乱码问题,确保你的数据库应用能够正确处理中文数据。在实际操作中,如果遇到困难,建议查阅官方文档或寻求社区支持。

    keepass2在Ubuntu 15.10下中文乱码的解决办法.docx

    Keepass2 在 Ubuntu 15.10 下中文乱码的解决办法 Keepass2 是一个流行的密码管理器,但是在 Ubuntu 15.10 下可能会出现中文乱码的问题。本文将详细介绍 Keepass2 在 Ubuntu 15.10 下中文乱码的解决办法。 问题描述...

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

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

    C# 将中文乱码转换成中文

    本文将深入探讨如何使用C#语言解决中文乱码问题,将乱码文本正确转换为可读的中文。 ### 核心知识点:字符编码与转换 #### 1. 字符编码概念 字符编码是计算机用于存储、传输和显示文字的一套规则,它将字符映射到...

    Navicat for MySql 导入EXCEL中文乱码问题解决

    ### Navicat for MySQL 导入Excel中文乱码问题解决 #### 一、问题背景 在使用Navicat for MySQL工具进行数据导入时,经常会出现中文乱码的问题,尤其是在处理Excel文件时更为常见。这种现象不仅影响数据的正确性,...

    sqlite3 for delphi 解决中文乱码问题

    在使用SQLite3数据库引擎与Delphi集成开发过程中,经常遇到的一个挑战是中文字符显示为乱码。"sqlite3 for delphi 解决中文乱码问题"这个主题,正是针对这一问题提供了解决方案。这里我们将详细探讨SQLite3在Delphi...

    完美解决source 3.5中文乱码

    然而,对于中文支持方面,早期版本如Source Insight 3.5可能存在一些问题,比如显示中文字符时出现乱码。这在处理包含中文注释或字符串的代码时会带来困扰。本篇文章将详细介绍如何完美解决Source Insight 3.5中的...

    C#的ini文件操作,解决网上未解决的Get或Set中文乱码问题

    本资源参考网上原版为存取英文字符的ini操作,未考虑中文乱码问题。而网上另外也有资料如何处理中文编码,例如转码为utf-8,存能解决乱码,取又出现问题。本资源我重新整理,用unicode完美解决中文乱码问题。用法: ...

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

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

    soapUI输入中文显示为乱码,响应报文中文乱码问题解决方法.txt

    soapUI输入中文显示为乱码 响应报文中文乱码问题解决方法

    Json操作及中文乱码解决方案

    总之,处理JSON操作中的中文乱码问题,关键在于确保数据的编码和解码过程中使用了UTF-8。在前端,jQuery的`$.getJSON`已经做了很好的处理,而在后端,如Java中,Gson库也可以有效地管理中文字符。对于其他编程语言和...

    小程序蓝牙打印--中文乱码已解决

    本文将重点讨论如何在微信小程序中实现蓝牙打印,并且着重解决中文乱码的问题,尤其针对安卓设备。 首先,我们要了解小程序的蓝牙API。微信小程序提供了丰富的蓝牙接口,包括开启蓝牙、搜索蓝牙设备、连接蓝牙设备...

    SQL-SERVER-64位配置ORACLE连接-中文乱码问题

    ### SQL-SERVER-64位配置ORACLE连接-中文乱码问题 在IT行业中,不同数据库之间的连接配置是一项常见的任务,特别是在需要实现跨平台数据交换的场景下。本文将详细介绍如何解决64位系统下的SQL Server连接Oracle...

Global site tag (gtag.js) - Google Analytics