搜档网
当前位置:搜档网 › 有关JSP和数据库乱码问题的处理方式

有关JSP和数据库乱码问题的处理方式

有关JSP和数据库乱码问题的处理方式
有关JSP和数据库乱码问题的处理方式

JSP乱码终极解决方案(2)2008-09-27 01:53 A.M

2,具体说来,需要哪些信息才能确定项目中的乱码的根源.

a,开发者所用的操作系统

b,j2ee容器的名称,版本

c,数据库的名称,版本(精确版本)以及jdbc驱动的版本

d,出现乱码的source code(比如是system out 出来的,还是jsp页面中的,如果是jsp中的,那么头

部声明的情况也很重要)

3,如何初步分析乱码出现的原因.

有了上述的信息,基本上就可以发帖求助了,相信放到javaworld等论坛上,很快就会有高手给你提出

有效的解决方案的.

当然不能总靠发帖求助,也要试试自行解决问题.如何下手呢?

a,分析一下你的"乱码"到底是什么编码.这个其实不难,比如

System.out.println(testString);

这一段出现了乱码,那么不妨用穷举法猜测一下它的实际编码格式.

System.out.println(new String(testString.getBytes("ISO-8859-1〃),"gb2312〃));

System.out.println(new String(testString.getBytes("UTF8〃),"gb2312〃));

System.out.println(new String(testString.getBytes("GB2312〃),"gb2312〃));

System.out.println(new String(testString.getBytes("GBK"),"gb2312〃));

System.out.println(new String(testString.getBytes("BIG5〃),"gb2312〃));

等等,上述代码的意思是用制定的编码格式去读取testString这个"乱码",并转换成gb2312(此处仅

以中文为例)

然后你看哪一个转换出来的结果是ok的,那就……

b,如果用上面的步骤能得到正确的中文,说明你的数据肯定是在的,只不过是界面中没有正确显示而

已.那么第二步就该纠正你的view部分了

,通常需要检查的是jsp中是否选择了正确的页面编码.

在此要声明被很多人误解的一点,那就是<%@ page contentType="text/html; charset=GB2312〃%>

指令和

content="text/html; charset=gb2312〃>两者的不同.通常网上的很多文章在提到中文问题时都是说

数据库中选择unicode或者gb2312存储,同

时在jsp中用page指令声明编码就可以解决.但是我觉得这种说法很不负责任,害的我费了N多时间为本

来并不存在的乱码而郁闷.实际上page

的作用是在jsp被编译成为html的过程中提供编码方式让java来"读取"表达式当中的String(有点类

似于上面的第三个语句的作用),而meta

的作用是众所周知的为IE浏览器提供编码选择,是用来"显示"最后的数据的.但是没有看到有人提醒

这一点,我一直把page当成meta在用,

导致本来是iso-8859的数据,被page指令读成gb2312,于是乱码,所以又加了编码转化的函数把所有的

string数据都从iso8859转到gb2312(为

什么这么转,当时也没考虑这么多,因为这么做可以正常显示了,所以就这么改了,呵呵当时实在没有

时间慢慢排查问题了).

4,数据库选择什么样的编码比较好.

目前流行的DB主要有sql server,mysql,oracle,DB2等,其中mysql作为免费DB中的老大,性能和功

能是得到公认的,安装配置比较方便,相

应的driver也比较完善,性价比是绝对的OK.所以就以mysql为例.

我个人建议采用mysql的默认编码来存储,也就是iso-8859-1(在mysql的选项中对应于latin-1).理

由主要有这么几个,一是iso-8859-1对中

文的支持不错;二是跟java中的默认编码一致,至少在很多地方免除了转换编码的麻烦;三是默认的比

较稳定,兼容性也更好,因为多编码的

支持是由具体的DB产品提供的,别说跟其它的DB会不兼容,即使自身的不同版本也可能出现兼容性的问

题.

例如mysql 4.0以前的产品中,很多中文的解决方案是利用connection中的characterEncoding字段来制

定编码,比如gb2312什么的,这样是ok

的,因为原数据都是ISO8859_1编码,jdbc驱动会采用url里面指定的character set来进行编码,

resultSet.getString(*)取出的就是编码后的

字符串.这样就直接拿到gb2312的数据了.

但是mysql 4.1的推出给很多dbadmin带来了不小的麻烦,因为mysql4.1支持column level 的character

set,每个table,column都可以指定编码

,不指定就是ISO8895_1,因此jdbc取出数据后会根据column的character set来进行编码,

而不再是用

一个全局的参数来取所有的数据了.

这从另一个方面也说明了乱码问题的产生实在是很复杂的事情,原因太多了.我也只是针对自己遇

////////////////////////////////////////////////////////////////////////////////////////

jsp中文问题解决之道[转载]

和Java一样,JSP是目前比较热门的一个话题.它是一种在服务器端编译执行的Web设计语言,因为脚本

语言采用了Java,所以JSP继承了Java的所有优点.可是在使用JSP程序的过程中,常遇到中文乱码问题

,很多人为此头疼不已,初学的时候我就深受其害,而且使用平台不同,中文乱码问题的解决方法也不

同,无形中增加了学习JSP的难度.其实,在彻底了解相关原因后,问题还是比较容易解决的.,以下

是我总结的解决方法,相信对读者会有一定的借鉴意义. (因为我使用得最多的是Tomcat 环境,所以

主要是以Tomcat为例,其它的环境只会提及一下,但解决办法也是差不多的!

每个国家(或区域)都规定了计算机信息交换用的字符编码集,如美国的扩展ASCII码、中国的GB2312

-80、日本的JIS 等,作为该国家(区域)信息处理的基础,有着统一编码的重要作用.由于各本地字

符集代码范围重叠,相互间信息交换困难,软件本地化版本独立维护成本较高.因此有必要将本地化工

作中的共性抽取出来,做一致性处理,将特殊的本地化处理内容降低到最少,这就是所谓的国际化

(I18N).各种语言信息被规范为本地信息,而底层字符集采用包含了所有字符的Unicode.

相信了解JSP代码的读者对ISO8859-1一定不陌生,ISO8859-1是我们平时使用比较多的一个CodePage,

它属于西欧语系.GB2312-80 是在国内计算机汉字信息技术发展初始阶段制订的,其中包含了大部分

常用的一、二级汉字和9区的符号.该字符集是几乎所有的中文系统和国际化的软件都支持的中文字符

集,这也是最基本的中文字符集.

GBK 是GB2312-80 的扩展,是向上兼容的.它包含了20902个汉字,其编码范围是0x8140~

0xFEFE,剔除高位0x80 的字位,其所有字符都可以一对一映射到Unicode 2.0,也就是说Java

实际上提供了对GBK 字符集的支持.

>GB18030-2000(GBK2K) 在GBK 的基础上进一步扩展了汉字,增加了藏、蒙等少数民族的文字.

GBK2K 从根本上解决了字位不够、字形不足的问题.

1.Tomcat 4开发平台

这个版本应该是我们经常用到的版本,所以讨论得会比较详细.

RWC2008发表于2008-10-11 11:14

Windows 98/2000下的Tomcat 4以上版本都会出现中文问题(而在Linux下和Tomcat 3.x中则没有问

题),主要表现是页面显示乱码.

为解决这个问题,最简单的方法就是在每个JSP的页面开始处加上<%@ page language="Java"

contentType="text/html; charset=gb2312"%>.不过,这还不够,虽然这时显示了中文,但是发现

从数据库读出的字段变成了乱码.经过分析发现: 在数据库中保存的中文字符是正常的,数据库用

ISO8859-1字符集存取数据,而Java程序在处理字符时默认采用统一的ISO8859-1字符集(这也体现了

Java国际化思想),所以在数据添加的时候Java和数据库都是以ISO8859-1方式处理,这

样不会出错.但

是在读取数据的时候就出现问题了,因为数据读出也采用ISO8859-1字符集,而JSP的文件头中有语句

<%@ page language="Java" contentType="text/html; charset=gb2312"%>,这说明页面采用

GB2312的字符集显示,这样就和读出的数据不一样.这时页面显示从数据库中读出的字符是乱码,解决

的方法是对这些字符转码,从ISO8859-1转成GB2312,就可以正常显示了.这个解决办法对很多平台具

有通用性,读者可以灵活运用.具体的方法会在以下详细讲解.另外,对于不同的数据库如SQL

Server,Oracle,Mysql,Sybase等,字符集的选择很重要.如果考虑多语言版本,数据库的字符集就

应该统一采用ISO8859-1,需要输出的时候在不同的字符集之间做转换就可以了.

以下是针对不同平台的总结:

(1) JSWDK只适合于普通开发,稳定性和其他问题可能不如商业软件. 由于JDK 1.3版性能要好于

JDK 1.2.2很多,并且对中文的支持也较好,所以应该尽量采用. 现在jdk已经出到1.4版本了,所以

如果允许最好升级到最新的版本,这样对中文的也会较好,而且还可以得到更多的支持.

(2) Tomcat仅仅是一个对JSP 1.1、Servlet 2.2标准的实现, 我们不应该要求这个免费软件在细节

和性能上都面面俱到, 它主要考虑英文用户, 这也是为什么不做特殊转换,汉字用URL 方法传递就有

问题的原因.大部分IE浏览器缺省始终以UTF-8发送, 这似乎是Tomcat的一个不足, 另外Tomcat不管

当前的操作系统是什么语言, 都按ISO8859去编译JSP, 似乎也欠妥.

2.JSP代码的中文处理

(1)如果与数据无关的操作,可以在页面首行加入

(2)将Form中的值传送到数据库中再取出来后全变成了"?".Form用POST提交数据,代码中使用了语

句:

String st=new(request.getParameter("name").getBytes("ISO8859_1")), 而且也声明了

charset=gb2312.

要处理Form中传递的中文参数,应该在JSP中加入下面的代码,另外定义一个专门解决这个问题的

getStr类,然后对接收到的参数进行转换:

String keyword1=request.getParameter("keyword1");

keyword1=getStr(keyword1);

这样就可以解决问题了,代码如下:

<%@ page contentType="text/html;charset=gb2312"%>

<%!

public String getStr(String str){

try{String temp_p=str;

byte[] temp_t=temp_p.getBytes("ISO8859-1");

String temp=new String(temp_t);

return temp;

}

catch(Exception e){ }

return "NULL";

}

%>

<%--[url]https://www.sodocs.net/doc/4c7926900.html,[/url]测试--%>

<% String keyword="创联网络技术中心欢迎您的到来";

String keyword1=request.getParameter("keyword1");

keyword1=getStr(keyword1);

out.print(keyword);

out.print(keyword1);

%>

另外,流行的关系数据库系统都支持数据库Encoding,也就是说在创建数据库时可以指定它自己的字符

集设置,数据库的数据以指定的编码形式存储.当应用程序访问数据时,在入口和出口处都会有

Encoding 转换.对于中文数据,数据库字符编码的设置应当保证数据的完整性. GB2312、GBK、

UTF-8 等都是可选的数据库Encoding,也可以选择ISO8859-1 (8-bit), 但会增加了编程的复

杂度,ISO8859-1不是推荐的数据库Encoding.在JSP/Servlet编程时,可以先用数据库管理系统提供

的管理功能检查其中的中文数据是否正确.

(3)JDBC Driver的字符转换

目前大多数JDBC Driver采用本地编码格式来传输中文字符,例如中文字符"0x4175"会被转成"0x41

"和"0x75"进行传输.因此需要对JDBC Driver返回的字符以及要发给JDBC Driver的字符进行转换

.当用JDBC Driver向数据库中插入数据时,需要先将Unicode转成Native code; 当JDBC Driver

从数据库中查询数据时,则需要将Native code转换成Unicode.下面给出了这两种转换的实现:

String native2Unicode(String s) {

if (s == null || s.length() == 0) {

return null;

}

byte[] buffer = new byte[s.length()];

for (int i = 0; i s.length(); i++) { if (s.charAt(i)>= 0x100) {

c = s.charAt(i);

byte []buf = (""+c).getBytes();

buffer[j++] = (char)buf[0];

buffer[j++] = (char)buf[1];

}

else {buffer[j++] = s.charAt(i);}

}

return new String(buffer, 0, j);

}

要注意的是,有些JDBC Driver如果通过JDBC Driver Manager设置了正确的字符集属性,以上方法

就不需要了.具体情况可参考相关JDBC的资料.

其实理解了,中文乱码就这么一回事!反复使用就会摸出一定的门道了!我觉得以上的三种方法,只要你

真的能弄懂,在遇到中文问题时,在这三种方法多试尝,我保证你不再会使这种中文问题所烦!

以上只是自己的一些经验所谈,如果有什么不对,希望能提出,共同学习!

//////////////////////////////////////////////////////////////////////////////////////////

我的乱码之路--JSP与MySQL交互的中文乱码解决方案及总结

首先实现了一个StringConvert bean(GBtoISO()和ISOtoGB()两个方法),解决了与MySQL 数据库

交互的时候的部分中文乱码问题:在JSP程序中读取MySQL的中文内容,用这两个方法可以解决乱码问题

.

但是从JSP写入到MySQL的中文内容都成了乱码,并且再读出来的时候也显示为"??",在这里应

该出现了编码转换过程中的字符信息丢失.郁闷的是,我在命令行窗口中登陆到MySQL 后,执行如

"INSERT INTO customerVALUES('字符',…)"这样的语句时,写入到数据表中的中文内容又是显示正

常的!!!数据库使用的字符集是utf8.

碰壁多次,终于发现一条解决问题的路径:查看MySQL手册的时候,看到一条这样的语句:

Toallow multiple character sets to be sent from the client, the "UTF-8"encoding should be

used, either by configuring "utf8" as the defaultserver character set, or by configuring

the JDBC driver to use "UTF-8"through the characterEncoding property.

此外,在查阅《MySQL权威指南》时,发现在查询语句中可以使用这样的语法将字符串转换到一个

给定的字符集:_charset str.

其中charset必须是服务器支持的某个字符集.在本例中,shopdb数据库使用的默认字符集是utf8

,于是开始测试:

先输入INSERT INTO publish Values('8',_gb2312 '高等教育出版社') 写入后中文变成"??

"

再试INSERT INTO publish Values('8',_gbk '高等教育出版社') 结果同上

INSERT INTO publish Values('8',_utf8 '高等教育出版社') 这下更干脆,什么都没有!!

快疯了!!没办法,用show character set;命令查看MySQL支持的字符集,心想我都试一遍总

有一个能成功吧.浏览了一下,发现没有几个熟悉的字符集,就只剩下一个latin1(ISO-8859-1)比较常

见了,不会是它吧,一试之下果然便是.

INSERT INTO publish Values('8',_latin1 '高等教育出版社') 输入中文能够正确显示.

这下总算找到方法了,把Tomcat下配置的数据库连接池的url改为

"…characterEncoding=UTF-8",然后把写入数据库的中文内容用

String s2 = new String(s1.getBytes("gb2312"),"ISO-8859-1")进行转码,其中s1为中文字符串.然后再写入到数据库一切显示正常.

为解决这个问题查看了n多资料,现作一个总结:由于字符集和字符编码方式的不同,在OS以

及程序之间传递数据(尤其是multiple character sets中的数据)时便会产生乱码以及字符信息的丢

失.解决这个问题的关键便是了解数据输出端和接收端使用的字符集和字符编码方式,如果这两种编码

方式不同,便需要在数据出口或入口处进行转码.一般的说,在编写代码,编译,以及运行期间都会字

符数据的传递,因此需要特别小心.

在编写代码的时候,你可能会使用某种开发工具,例如我正在使用的Eclipse.或许在写的时候

一切正常,可是一旦保存后再次打开文档,所有的中文字符都变成了乱码.这是因为在编写的时候,这

些字符数据都在内存的某个stream中,ok,这没问题,可是保存的时候这个stream中的数据会被写入到

硬盘,使用的就是你的开发工具默认的编码方式,如果很不幸你的开发工具默认编码方式是ISO-8859-1

,中文字符信息就不能正确地存储.Eclipse中可以这样查看并修改默认字符编码方式:Project-

>Properties->info,这里有"default

encoding for text file".如果设置为GBK,那么编写代码并保存这关就过了.

对于JSP程序而言,编写完代码后就交给Container,首先它们会被转成.java文件,然后编译成

.class才能提交给服务器执行.这个过程也存在字符编码问题.java编译器(javac)使用操作系统的语

言环境作为默认的字符编码方式,JRE(Java Runtime Environment)也是这样.只有当编译和运行环境

的字符编码方式与存储源文件的编码方式相同时,中文字符才能正确地显示.否则就需要在运行时进行

转码,使它们使用兼容的编码.这里的设置可以分为几个层次:操作系统层支持的语言,这是最重要的

,因为它会影响JVM的默认字符编码方式,同时对字符的显示,如字体等有直接影响;J2EE 服务器层

,大多数服务器都可以对字符编码进行自定义的配置,例如Tomcat就可以通过web.xml 中设置

javaEncoding参数设置字符编码,默认是UTF-8.

IE也可以设置成总是使用UTF-8编码来发送请求.应用程序层,每个配置在服务器下的程序都可以

设置自己的编码方式,这个我目前还没有用到,以后再学习.

运行时的转码,运行时期,应用程序很可能需要与外部系统进行交互,例如对数据库进行读写

,对外部文件进行读写.在这些情况下,应用程序免不了要和外部系统进行数据交换.那么对于中文字

符, 数据出入口的编码方式就显得特别重要了.一般外部系统都有自己的字符编码方式,我的例子中

配置的MySQL就是使用的UTF-8编码.JSP页面通过设定"charset=gb2312",

使用gb2312编码,在它与数据库交互的时候就需要进行显式的转码才能正确处理中文字符.

RWC2008发表于2008-10-11 11:15

解决jsp中文乱码问题2008-08-19 14:16增加filter:UTF

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

package util;

/**

*

* @author MX

*/

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;

//import javax.servlet.UnavailableException;

//import javax.servlet.http.HttpServletRequest;

//import javax.servlet.http.HttpServletResponse;

public class UTF 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 {

// Conditionally select and set the character encoding to be used

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);

}

}

在web.xml中增加配置

Set Character Encoding

util.UTF

encoding

UTF-8

Set Character Encoding

/*

RWC2008发表于2008-10-11 11:15

过滤器(Filter)解决JSP的Post和Request中文乱码2008-08-23 15:16import javax.servlet.*; import javax.servlet.http.*;

public class CharsetFilter implements Filter

{

public void destroy()

{

}

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {

try

{

HttpServletRequest httpRequest = (HttpServletRequest)request;

String method = httpRequest.getMethod().toLowerCase();

if(method.equals("post"))

{

//如果是post,即表单方法,直接设置charset即可

request.setCharacterEncoding("UTF-8");

}

else if(method.equals("get"))

{

//如果是get方法

request.setCharacterEncoding("UTF-8");

request = new HttpServletRequestWrapper((HttpServletRequest)request)

{

public String getParameter(String str)

{

try

{

return new String(super.getParameter(str).getBytes("iso-8859-1"),"GBK");

}

catch(Exception e)

{

return null;

}

}

};

}

chain.doFilter(request, response);

}

catch(Exception e){}

}

public void init(FilterConfig filterConfig)

{

}

}

过滤器配置:

CharFilter

CharsetFilter

CharFilter

/*

REQUEST

RWC2008发表于2008-10-11 11:16

jsp 页面传值中文乱码问题解决2008-09-16 13:43 1、jsp页面中文可以修改pageencoding的值来解决

2、Filter可以解决post提交的中文乱码问题

3、Tomcat server.xml 里面配置,解决get方式提交的问题

第一点比较好办,不用多说。

第二点设置成功的话只能对post提交起作用。具体方法就是在web.xml里面设置一个过滤器,我有一个简单的。

Set Character Encoding

project.encoding.filter.EncodingFilter

encoding

utf-8

Set Character Encoding

/*

其中相应的类为:

package project.encoding.filter;

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.http.HttpServlet;

public class EncodingFilter extends HttpServlet implements Filter{

public void destroy() {

}

public void doFilter(ServletRequest request, ServletResponse response,

FilterChain chain)throws IOException, ServletException {

request.setCharacterEncoding("GBK");

chain.doFilter(request, response);

}

public void init(FilterConfig filterConfig) throws ServletException {

}

}

这样就OK了!

第三点就是在tomcat的server.xml里面的connecter里面加上一句URIEncoding="gbk" 就可以了:

connectionTimeout="20000"

redirectPort="8443" />

RWC2008发表于2008-10-11 11:20

JSP页面通过URL传递中文参数的乱码问题2008-07-17 13:19

一就是指定页面编码指定为<%@ page contentType="text/html; charset=gb2312"%>和,然后request. getParameter()得到参数后通过getBytes()转码。我原来用jsp+servlet写程序时,也是这样处理,而且可行。但由于现在整个项目所有页面编码均指定为utf-8,所以全改为gb2312不太现实。网上也有说通过添加过滤器的方式,设置request如下:request.seCharacterEncoding ("utf-8"),得到参数后通过new String(iso.getBytes("ISO-8859-1"),"utf-8")即可。尝试了一下,依旧失败。奇数乱码,偶数正常。

二就是通过https://www.sodocs.net/doc/4c7926900.html,.URLEncoder.encode(keywords)和decode方法来处理。在发送请求之前,先通过encode()对汉字进行编码,在处理参数时,用decode解码。如下示例:

<%

String paramValue = "汉字参数";

%>

这种方法或许可行,但由于我用的struts框架,按此方法不好处理。

花了一个晚上和一个上午,终于找到第三种可行的办法。通过javascript的escape来对参数进行处理后传输,再在后台调用一个模拟实现了javascript的escape和unescape方法的工具类对参数进行解码。步骤如下:

1. JSP页面,对含汉字的参数调用两次escape。

document.forms[0].action = "/query.do?act=getResult&queryValue=" + escape(escape(queryCondition));

document.forms[0].submit();

为何要调用两次escape,我没弄明白。测试了一下,如果只调用一次,在后台通过request. getParameter(“queryValue”)还真得不到值。

2. 通过调用工具类Escape. unescape()方法进行解码得可得到中文。实在佩服写这个工具类的人。这世上真是什么强人都有。Escape如下:

public class Escape {

private final static String[] hex = { "00", "01", "02", "03", "04", "05",

"ED", "EE", "EF", "F0", "F1", "F2", "F3", "F4", "F5", "F6", "F7",

"F8", "F9", "FA", "FB", "FC", "FD", "FE", "FF" };

private final static byte[] val = { 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,

0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,

0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,

0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,

0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x01,

0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x3F, 0x3F, 0x3F,

0x3F, 0x3F, 0x3F, 0x3F, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x3F,

0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,

0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,

0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F };

/** */

/**

* 编码

*

* @param s

* @return

*/

public static String escape(String s) {

StringBuffer sbuf = new StringBuffer();

int len = s.length();

for (int i = 0; i < len; i++) {

int ch = s.charAt(i);

if ('A' <= ch && ch <= 'Z') {

sbuf.append((char) ch);

} else if ('a' <= ch && ch <= 'z') {

sbuf.append((char) ch);

jsp读取数据库中文乱码问题

jsp读取数据库中文乱码问题 这个问题是从项目中设计数据库和操作数据库的人不同而造成的。所用的数据库 是sybase,设计时把数据类型设计为nvarchar了,如果是中文,读取出来就会得到乱码。我试了好多方法还是不行,最后无奈,只好将数据类型改为varchar了。所以在此总结一下中文乱码问题。 一、JSP与页面参数之间的乱码 JSP获取页面参数时一般采用系统默认的编码方式,如果页面参数的编码 类型和系统默认的编码类型不一致,很可能就会出现乱码。解决这类乱码问题的 基本方法是在页面获取参数之前,强制指定request获取参数的编码方式:request.setCharacterEncoding("GBK")或request.setCharacterEncoding ("gb2312")。 如果在JSP将变量输出到页面时出现了乱码,可以通过设置 response.setContentType("text/html;charset=GBK")或 response.setContentType("text/html;charset=gb2312")解决。 二、Java与数据库之间的乱码 大部分数据库都支持以unicode编码方式,所以解决Java与数据库之间的 乱码问题比较明智的方式是直接使用unicode编码与数据库交互。很多数据库驱动自动支持unicode,如Microsoft的SQLServer驱动。其他大部分数据库驱动,可以在驱动的url参数中指定,如如mm的mysql驱动: jdbc:mysql://localhost/WEBCLDB?useUnicode=true&characterEncoding=GBK。 三、Java与文件/流之间的乱码 Java读写文件最常用的类是FileInputStream/FileOutputStream和FileReader/FileWriter。其中FileInputStream和FileOutputStream是基于字节 流的,常用于读写二进制文件。读写字符文件建议使用基于字符的FileReader和

mysql乱码处理

用MS SQL和oracle9 太吃内存,有点大,全给卸载了. 安装了mysql占内存小,方便使用! version:mysql-essential-5.1.36 在MySQL Command Line Client显示中文一切正常; 在eclipse中新工程,连接到mysql,读取一个表显示: 代码: package com.mch.mysql; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class Mysql1 { public static void main(String[] args) { String url ="jdbc:mysql://localhost/test"; String user="root"; String password="******"; try { Class.forName("org.gjt.mm.mysql.Driver").newInstance(); Connection conn= DriverManager.getConnection(url,user,password); Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery("select * from pet"); while(rs.next()){ System.out.print("name:" + rs.getString(1)); System.out.print("\t所有者:" + rs.getString(2)); System.out.print("\tbirth:" + rs.getString("birth")); System.out.println(); } rs.close(); stmt.close(); conn.close(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } } } 显示乱码?号.

jsp乱码问题全部解决

Jsp乱码问题 Eclipse中源码的中文部分都显示成乱码 1(1)右键点击你的工程,选择Properties,打开面板后,选择Resource,将Test file encoding 项中选择Others,再选择UTF-8 (2)右键你的项目,选择属性,在里面进行设置。 编码,最好设置成UTF-8的,因为它的兼容性最好。 (3)eclipse 首选项中设你要的编码-也就是你说的那个空间要用的是什么字符编码 还有一个就是JSP的<%@ contenteType="text/html;charset=utf-8" page %>里面有二个 指定文件的编码。我用的是英文版的Eclipse,现在就用英文版来说明这个过程。 打开菜单–Window–Preferences–General–Content Types,展开右边Text旁的加号,向下查找到”Java Source File”, 2.乱码解决方法: 1.web服务器的编码设置 server.xml //你也可以写一个过滤器 request.setCharacterEncding("utf-8") response.setCharacterEncding("utf-8") 2.取参数时设置编码 request.setCharacterEncoding("utf-8"); 3.对字符串进行强制转码 String name = request.getParameter("name"); name = new String(name.getBytes("is0-8859-1"),"utf-8"); 4.源代码里的编码方式 a.设置项目属性,使它的编码方式与文件编码方式相同。 b.设置文件属性,使它的编码方式与文件编码方式相同。 还有数据库中,和数据库连接时也要设。。 回答者:qqgg123kk | 二级| 2011-3-5 14:52 <%@page language="java"contentType="text/html; charset=gb2312" pageEncoding="utf-8"import="java.util.Date"%> 打开菜单–Window–Preferences–General–Content Types JAVABEAN使用

解决openfire在使用MySQL数据库后的中文乱码问题

解决openfire在使用MySQL数据库后的中文乱码问题 openfire是一个非常不错的IM服务器,而且是纯Java实现,具有多个平台的版本,他的数据 存储可以采用多种数据库,如MySQL,Oracle等。 在实际使用时大家遇到最多的就是采用MySQL数据库后的中文乱码问题,这个问题十分有趣, 而且从现象上可以看出openfire内部的一些机制。 实际问题是这样的:首先启动openfire服务器,然后利用客户端或直接登录到后台新建一个帐户,为该帐户指定一些中文的属性,如姓名等。如果不重启服务器,你永远不会觉得有什么不对的地方,因为所有的中文显示都是正常的。接下来重启一下openfire,再用建立的帐号登录 客户端或进入后台管理端查看,会发现所有的中文全都变成了问号。登录到数据库中进行查看,发现所有的中文字符也均为问号,这说明了两个问题: openfire具有应用层缓存 数据库编码存在问题 解决办法其实也很简单,首先要保证你为openfire创建的数据库编码是utf8的,建表语句如下: create database openfire default character set utf8 default collate utf8_general_ci 当你原来就创建好数据库时,你可以用: alter database openfire default character set utf8 default collate utf8_general_ci; 其次,在初始化openfire数据库,即第一次配置openfire服务器时,在连接数据库那里的连 接串要加入字符编码格式,必须在连接里增加UTF8的编码要求,连接字符串设置如下: jdbc:mysql://127.0.0.1:3306/openfire?useUnicode=true&characterEncoding=utf8 如果已经安装完成,这个配置也是可以改动的,直接到openfire的安装目录下,找到 conf/openfire.xml这样一个文件,打开找到如下的XML节,修改其中的serverURL即可 com.mysql.jdbc.Driver jdbc:mysql://127.0.0.1:3306/openfire?useUnicode=true&characterEncodi ng=utf8 注意:由于&具有特殊含义,因此原&符号必须被转义为&

jsp页面传值中文乱码 网页乱码 jsp过滤器过滤乱码等乱码处理办法

一、jsp页面间传值中文乱码问题解决办法 <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%>

name:
b.jsp页面内容: <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%> <% String name=request.getParameter("name"); %> <%=name%> 现象:中文乱码,比如“??????” 解决方法如下: 方法一: 1. 在b.jsp中把pageEncoding="GB2312"改为 pageEncoding="ISO885Array-1" 虽然这样b.jsp页面显示的内容还是乱码,但是不是那种“??????”的乱码,而是一些特殊字符 2. 然后在浏览器中查看菜单中修改成GB2312的编码,这时乱码就显示中文了。 3. 但是这种方法是不可行的。 方法二:( 已经验证可行) 1. 在b.jsp中把String name=request.getParameter("name");修改为 String name=new String(request.getParameter("name").getBytes("ISO-885 Array-1"),"GB2312"); 2. 这时再在页面上显示,则就是中文了。 方法三:

解决PHP+mysql处理中文乱码的独家方案

解决PHP+mysql处理中文乱码的独家方案 本方案适用于所有页面文件均为php(已成功测试过),如果有混合文件读者可以亲自测试。 问题现象如下图,1所示为修复过的头部引用文件header.php,中文能正常显示,2所示为未修复过的standard.php页面文件。 一、为了解决问题,首先应该设置数据库的字符编码,如下图所示,本例将所有编码设置为UTF-8。 同样将数据库中的所有表的字符编码设置成UTF-8。

这样,数据库中可以正常显示中文字符了,如下图所示。 如果要导入外来数据,也要设置好字符编码,对于非mysql数据库的导入(如从ACCESS数据库中导入),需要设置分隔字段的字符,然后执行便可,如下图所示。 ---------------------------------------- 二、数据库的字符编码完成后,便要将页面文件的编码设置好。 这里的要点有如下三点(红色为说明文字):

为了实现上述三点要求,本例采用的方案如下: 1.创建一个数据库连接文件conn.php ,其中在开头设置header 编码,并在创建数据连接后设置SQL 请求的编码,如下图所示: 2.设置页面文件的文件类型。可以在页面文件中的标签中设置字符编 码。 2.1如果之前的字符编码为gb2312,则该文件类型为ANSI (本例使用DW 和notepad++软件,读者也可用UE 编辑软件,只不过类型显示名称不一样而已),如下图所示: 2.2将标签的编码设置成utf-8并保存文件后,再次打开,会发现文件类型变成了ANSI as UTF-8,如下图所示:

JSP中文乱码的产生原因及解决方案

JSP中文乱码的产生原因及解决方案 在JSP的开发过程中,经常出现中文乱码的问题,可能一直困扰着大家,现在把JSP 开发中遇到的中文乱码的问题及解决办法写出来供大家参考。首先需要了解一下Java中文问题的由来: Java的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦。原因主要有两方面,Java和JSP文件本身编译时产生的乱码问题和Java程序于其他媒介交互产生的乱码问题。首先Java(包括JSP)源文件中很可能包含有中文,而Java和JSP源文件的保存方式是基于字节流的,如果Java和JSP编译成class文件过程中,使用的编码方式与源文件的编码不一致,就会出现乱码。基于这种乱码,建议在Java文件中尽量不要写中文(注释部分不参与编译,写中文没关系),如果必须写的话,尽量手动带参数-ecoding GBK或-ecoding gb2312或-ecoding UTF-8编译;对于JSP,在文件头加上<%@ page contentType="text/html;charset=GBK"%>或 <%@ page contentType="text/html;charset=gb2312"%>基本上就能解决这类乱码问题。 下面是一些常见中文乱码问题的解决方法(下面例子中ecoding采用的是gb2312,也可设为ecoding GBK或ecoding UTF-8): 一、 JSP页面乱码 这种乱码问题比较简单,一般是页面编码不一致导致的乱码,一般新手容易出现这样的问题,具体分以下两种情况: 未指定使用字符集编码 下面的显示页面(display.jsp)就出现乱码: JSP的中文处理 <%out.print("JSP的中文处理");%>

mysql数据库乱码问题

数据库读出乱码解决 一、分析常见数据库问题 修改MYSQL数据库,数据表,字段的编码(解决JSP乱码) 要解决JSP乱码,首先就要了解JSP乱码的原因 1.架设服务器安装MYSQL时的会让你选择一种编码,如果这种编码与你的网页不一致,可能就会造成JSP页面乱码 2.在PHPMYADMIN或mysql-front等系统创建数据库时会让你选择一种编码,如果这种编码与你的网页不一致,也有可能造成JSP页面乱码 3.创建表时会让你选择一种编码,如果这种编码与你的网页编码不一致,也可能造成JSP页面乱码 4.创建表时添加字段是可以选择编码的,如果这种编码与你的网页编码不一致,也可能造成JSP 页面乱码 5.用户提交JSP页面的编码与显示数据的JSP页面编码不一致,就肯定会造成JSP页面乱码. 如用户输入资料的JSP页面是big5码,显示用户输入的JSP页面却是gb2312,这种100%会造成JSP页面乱码 6.字符集不正确 要注意: 1.平时你在某些网站看到的文字可能有几种编码,如你看到一个繁体字,它有可能是big5编码,也有可能是utf-8编码的,更有可能是gb码的,没错,也就是说有简体编码的繁体字,也有繁体编码的简体字,一定要了解这一点. 如果你是做一个简体编码的网页,编码定为GB2312,如果有香港和台湾地区的访客提交繁体的信息,就可能会造成乱码,解决方法就是(1)将网站编码设为utf-8,这样可以兼容世界上所有字符,(2)如果网站已经运作了好久,已有很多旧数据,不能再更改简体中文的设定,那么建议将页面的编码设为GBK, GBK与GB2312的区别就在于:GBK能比GB2312显示更多的字符,要显示简体码的繁体字,就只能用GBK 7.JSP连接MYSQL数据库语句指定的编码不正确 8.JSP页面没有指定数据提交的编码,就会造成乱码: 所以,JSP乱码的原因无非就是以上几种,知道原因之后,要解决JSP乱码的方法也容易多了 我们一一来表达: 1.如果安装mysql的编码已不能更改,很多朋友是购买虚拟主机建立网站,无权更改MYSQL的安装编码,这一关我们可以跳过,因为只要后面的步聚正确,一样能解决乱码问题 2.修改数据库编码,如果是数据库编码不正确:可以在phpmyadmin执行如下命令:ALTER DATABASE`test`DEFAULT CHARACTER SET utf8COLLATE utf8_bin 以上命令就是将test数据库的编码设为utf8

jspjava乱码解决

中文乱码总结: 1-->响应中的乱码: 单个页面中,如果出现中文(注意不是post中文也不是get中文,只是显示中文而已),而且使用的是 <%@page contentType="text/html;charset=iso-8859-1"%> 此时显示的 中文就是乱码,为什么呢? 因为charset=iso-8859-1 是设置http的响应(response)中的编码信息,因为是中文,所以http给浏览器显示的 汉字是乱码。 2-->post乱码: 两个页面(或多个页面)通过form表单post传值(form的默认提交方式都是GET)时,这里与1不同,为什么呢? 因为此时发送了请求有request,而1中没有request只是响应而已。发送请求的时候,使用的编码默认的是iso-8859-1, 意味着只有英文是有效字符,这个限制是因为当初指定http标准的成员都来自英语国家,所以如果使用默认的方式 从请求获取数据,中文一定会全部变成乱码。此时就要加上 request.setCharacterEncoding("gbk");有了 请求request.setCharacerEncoding("gbk")编码方式和http的响应(response)中的编码信息 <%@pagecontentType="text/html;charset=gbk"%> 两个都gbk,此时body中的(注意是body,如果是url就会有问题往下看就知道了)中文就不会显示为乱码 a---乱码出现的过程是这样的,传的是汉字,发送请求的默认编码是 iso-8859-1,此时把汉字按iso-8859-1转码出现问题出现??或莫名的符号,响应的时候位数都打乱了(iso-8859-1和gbk编码位数不一样),虽然 <%@pagecontentType="text/html;charset=gbk"%>但还是会出现乱码。 b---而采用request.setCharacerEncoding("gbk")设置请求编码后的话,汉字就不会被转成乱码。 3-->get乱码 POST方式下的解决方式还算简单,因为POST方式下提交的数据都是以二进制的方式附加在http请求的body部分发送, 只需要在后台指定编码格式就足矣解决。 GET方式下会将参数直接附加到url后面,这部分参数无法使用 request.setCharacterEncoding()处理,结果就是get形式的所有中文都变成了乱码

mysql+php中文乱码问题及mysql时间函数

mysql+php中文显示乱码的解决mysql+php中文显示乱码的解决 建议数据库用utf8编码 问题汇总: 1.mysql数据库默认的编码是utf8,如果这种编码与你的PHP网页不一致,可能就会造成MYSQL乱码. 2.MYSQL中创建表时会让你选择一种编码,如果这种编码与你的网页编码不一致,也可能造成MYSQL乱码. 3.MYSQL创建表时添加字段是可以选择编码的,如果这种编码与你的网页编码不一致,也可能造成MYSQL乱码. 4.用户提交页面的编码与显示数据的页面编码不一致,就肯定会造成PHP 页面乱码. 5.如用户输入资料的页面是big5码, 显示用户输入的页面却是gb2312,这种100%会造成PHP页面乱码. 6.PHP页面字符集不正确. 7.PHP连接MYSQL数据库语句指定的编码不正确. 使用mysql+php产生乱码的原因都了解得很清楚了,那么解决就不困难

了. 针对不同问题的解决方法: 1.mysql数据库默认的编码是utf8,如果这种编码与你的PHP网页不一致,可能就会造成MYSQL乱码. 修改数据库编码,如果是数据库编码不正确,可以在phpmyadmin 执行如下命令: ALTER DATABASE 'test' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin 以上命令就是将test数据库的编码设为utf8. 2.MYSQL中创建表时会让你选择一种编码,如果这种编码与你的网页编码不一致,也可能造成MYSQL乱码. 修改表的编码: ALTER TABLE 'category' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin 以上命令就是将一个表category的编码改为utf8. 3.MYSQL创建表时添加字段是可以选择编码的,如果这种编码与你的网页编码不一致,也可能造成MYSQL乱码. 修改字段的编码: ALTER TABLE 'test' CHANGE 'dd' 'dd' VARCHAR( 45 ) CHARACTER SET utf8

mysql中文乱码解决

转载:Mysql中文乱码的解决方法 第一种方法,很精辟的总结: 经常更换虚拟主机,而各个服务商的MYSQL版本不同,当导入数据后,总会出现乱码等无法正常显示的问题,查了好多资料,总结出自己的一点技巧: WINDOWS 下导入应该这样 使用MYSQL的命令 在DOS 命令下进入mysql的bin目录下,输入mysql -uroot -p密码数据库名称<要恢复的数据库, 例如我们要把D盘的一个名称为test.sql的数据库恢复到本地的test2这个数据库,那么就这样: mysql -uroot -p密码test2以前的国外主机用的Mysql是4.x系列的,感觉还比较好,都无论GBK和UTF-8都没有乱码,没想到新的主机的Mysql是5.0版本的,导入数据后,用Php读出来全是问号,乱码一片,记得我以前也曾经有过一次切换出现乱码的经验,原因肯定是Mysql版本之间的差异问题。 只好查资料,发现了一个解决方法,就是在mysql_connect后面加一句SET NAMES UTF8,即可使得UTF8的数据库消除乱码,对于GBK的数据库则使用SET NAMES GBK,代码如下: $mysql_mylink = mysql_connect($mysql_host, $mysql_user, $mysql_pass); mysql_query("SET NAMES 'GBK'"); 数据库字符集为utf-8 连接语句用这个 mysql_query("SET NAMES 'UTF8'"); mysql_query("SET CHARACTER SET UTF8"); mysql_query("SET CHARACTER_SET_RESULTS=UTF8'");

jsp文件调用js时,js文件中文字乱码

register.jsp checkreg.js function check(myform){ if(myform.email.value==""){ alert("test请输入Email地址!");myform.email.focus();return (false); } if(!checkemail(myform.email.value)){ alert("您输入Email地址不正确!");myform.email.focus();return (false); } } JSP文件调用外部js文件时,alert出来的对话框中中文是乱码! 解决方案:将js文件在UltraEdit等软件中,另存为utf-8编码格式,再复制到工程中 总结: 许多乱码情况都是两个文件编码格式不统一造成的,所以将两个文件的编码格式统一是解决乱码问题的一个指导思想! 1、在JS里对中文参数进行两次转码 复制代码代码如下: var login_name = document.getElementById("loginname").value; login_name = encodeURI(login_name); login_name = encodeURI(login_name); var aMsg = [ "很不满意|与人们描述的严重不符,非常不满", "不满意|部分有与人们描述的不符,不满意", "一般|一般,没有人们描述的那么好", "满意|不错,与人们描述的基本一致,还是挺满意的", "非常满意|与人们描述的完全一致,非常满意" ]; aMsg = encodeURI(aMsg); aMsg = encodeURI(aMsg);

Oracle数据库工具中文显示乱码问题的解决

Oracle数据库工具中文显示乱码问题的解决 Oracle客户端查询工具有时会有查处的结果为中文时不能正常显示,要么为乱码,要么为问号,plsql出现这种问题,以为是版本造成的,用了老的和最新的还是一样,换了另外的数据库工具也一样,但注意一点,数据其实是没有问题的,取出来显示是正常的中文,只是在工具里显示的是问号。其实问题的原理很简单,就是字符集设置不正确造成的,但如此简单的原理在解决的过程中却会遇到很多麻烦,下面结合我遇到和解决的过程,给朋友们一点思路,说不定你们跟我的问题一样,通过这篇文章不用再折腾了,很快搞定,感觉飘飘…… 首先讲讲字符集的知识,Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。 影响oracle数据库字符集最重要的参数是NLS_LANG参数。它的格式如下: NLS_LANG = language_territory.charset 它有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。 其中: Language 指定服务器消息的语言,territory 指定服务器的日期和数字格式,charset 指定字符集。如:AMERICAN _ AMERICA.

ZHS16GBK。从NLS_LANG的组成我们可以看出,真正影响数据库字符集的其实是第三部分。所以两个数据库之间的字符集只要第三部分一样就可以相互导入导出数据,前面影响的只是提示信息是中文还是英文。 如何查询Oracle的字符集,很多人都碰到过因为字符集不同而使数据导入失败的情况。这涉及三方面的字符集,一是oracel server端的字符集,二是oracle client端的字符集;三是dmp文件的字符集。在做数据导入的时候,需要这三个字符集都一致才能正确导入。 查询oracle server端的字符集,有很多种方法可以查出oracle server 端的字符集,比较直观的查询方法是以下这种:SQL>select userenv(‘language’) from dual; 结果类似如下:AMERICAN _ AMERICA. ZHS16GBK 对于查询工具结果集中的中文乱码,其实有两种情况供参考: 1.安装了服务器及配套工具,这样还出现乱码就去检查注册表中的NLS_LANG项是否设置正确,很有可能是在安装时设置了不正确的字符集造成的; 2.只安装了客户端,没有配套工具(如sqlplus等),以10g为例,注册表中是没有NLS_LANG这项的,那么要改哪?同理,还是要改字符集,不过不是在注册表中设,是要在环境变量中增加或修改,即查看windows系统环境变量是否存在NLS_LANG,若存在则修改,

有关JSP和数据库乱码问题的处理方式

JSP乱码终极解决方案(2)2008-09-27 01:53 A.M 2,具体说来,需要哪些信息才能确定项目中的乱码的根源. a,开发者所用的操作系统 b,j2ee容器的名称,版本 c,数据库的名称,版本(精确版本)以及jdbc驱动的版本 d,出现乱码的source code(比如是system out 出来的,还是jsp页面中的,如果是jsp中的,那么头 部声明的情况也很重要) 3,如何初步分析乱码出现的原因. 有了上述的信息,基本上就可以发帖求助了,相信放到javaworld等论坛上,很快就会有高手给你提出 有效的解决方案的. 当然不能总靠发帖求助,也要试试自行解决问题.如何下手呢? a,分析一下你的"乱码"到底是什么编码.这个其实不难,比如 System.out.println(testString); 这一段出现了乱码,那么不妨用穷举法猜测一下它的实际编码格式. System.out.println(new String(testString.getBytes("ISO-8859-1〃),"gb2312〃)); System.out.println(new String(testString.getBytes("UTF8〃),"gb2312〃)); System.out.println(new String(testString.getBytes("GB2312〃),"gb2312〃)); System.out.println(new String(testString.getBytes("GBK"),"gb2312〃)); System.out.println(new String(testString.getBytes("BIG5〃),"gb2312〃)); 等等,上述代码的意思是用制定的编码格式去读取testString这个"乱码",并转换成gb2312(此处仅

SQLSERVER访问MYSQL表中文显示成乱码

错误描述:SQLSERVER访问MYSQL表中文显示成乱码,中文会显示成???? 解决思路:用的是mysql-5.1.50-win32 与odbc3.1版本的.现在改成ODBC5·1 这样转换就没有问题SQLSERVER连接MYSQL 建立链接如下: 数据库软件与ODBC软件:mysql-5.1.50-win32与ODBC5·1(注意,odbc3.1版本,会出现乱码)MYSQL数据库情况:gmp_test 第一步:先要在MYSQL进行授权,让主机能访问MYSQL数据库,设置如下: 在mysql数据库执行,语句: GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.216' IDENTIFIED BY 'yxtech' WITH GRANT OPTION; 第二步:在SQLSERVER主机,设置ODBC连接,设置如下图: 第三步:在SQL SERVER 配置连接,配置语句如下 --删除连接 exec sp_dropserver'dxmysql','droplogins' --建立一个新连接 EXEC SP_ADDLINKEDSERVER @server ='dxmysql', --连接名称(随意,规范就可)

@srvproduct ='MYSQL', --连接MYSQL,数据库类型,固定的 @provider ='MSDASQL', --连接MYSQL的编码,固定的 @datasrc ='my_sql' --建立的ODBC连接(第二步建立的) --建立用户连接 EXEC sp_addlinkedsrvlogin'dxmysql','false','bi_etl','root','yxtech' --'dxmysql'为连接名称 --'bi_etl'为SQLSERVER用户,如果为NULL --'root','yxtech' 为登录MYSQL 的用户及密码 --进行查询 select*FROM OPENQUERY(dxmysql,'select * from test1')

如何解决MYSQL数据库中文乱码问题-

如何解决MYSQL数据库中文乱码问题? 问题:如何解决MYSQL数据库中文乱码问题? 回答: 在数据库安的时候指定字符集 如果在安完了以后可以更改以下文件: C: Program Files MySQL MySQL Server 5.0 my.ini 里的所有的default-character-set=gbk C: Program Files MySQL MySQL Server 5.0 data depot_development db.opt default-character-set=gbk default-collation=gbk_chinese_ci 建立数据库时候:指定字符集类型 CREATE DATABASE haichen CHARACTER SET gbk COLLATE gbk_chinese_ci 2.建表的时候也指定字符集 CREATE TABLE student ( ID varchar(40) NOT NULL default , UserID varchar(40) NOT NULL default , ) ENGINE=InnoDB DEFAULT CHARSET=gbk; -

1。创建数据库的时候:CREATE DATABASE `database` CHARACTER SET utf8 COLLATE utf8_general_ci 2.建表的时候CREATE TABLE `database_user` ( `ID` varchar(40) NOT NULL default , `UserID` varchar(40) NOT NULL default , ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 3.设置URL的时候jdbc:mysql://localhost:3306/database useUnicode=true characterEncoding=UTF-8

乱码的原因及处理方法

乱码的原因及处理方法 2012-05-09 17:16 困扰已久的乱码问题终于得到解决,希望下次出现更多问题,解决问题的过程很愉快! 关于jsp乱码问题的解决 2009-01-22 21:32 关于jsp乱码问题的解决。 1 最基本的乱码问题。 这个乱码问题是最简单的乱码问题。一般新会出现。就是页面编码不一致导致的乱码。 <%@ page language="java" pageEncoding="UTF-8"%> <%@ page contentType="text/html;charset=gb2312"%> 中文问题 我是个好人 三个地方的编码。 第一个地方的编码格式为jsp文件的存储格式。Eclipse会根据这个编码格式保存文件。并编译jsp文件,包括里面的汉字。 第二处编码为解码格式。因为存为UTF-8的文件被解码为iso8859-1,这样 如有中文肯定出乱码。也就是必须一致。而第二处所在的这一行,可以没有。

缺省也是使用iso8859-1的编码格式。所以如果没有这一行的话,“我是个好人”也会出现乱码。必须一致才可以。 第三处编码为控制浏览器的解码方式。如果前面的解码都一致并且无误的话,这个编码格式没有关系。有的网页出现乱码,就是因为浏览器不能确定使用哪种编码格式。因为页面有时候会嵌入页面,导致浏览器混淆了编码格式。出现了乱码。 2 表单使用Post方式提交后接收到的乱码问题 这个问题也是一个常见的问题。这个乱码也是tomcat的内部编码格式 iso8859-1在捣乱,也就是说post提交时,如果没有设置提交的编码格式,则会以iso8859-1方式进行提交,接受的jsp却以utf-8的方式接受。导致乱码。既然这样的原因,下面有几种解决方式,并比较。 A 接受参数时进行编码转换 String str = new String(request.getParameter("something").getBytes("ISO-8859-1"),"utf-8");这样的话,每一个参数都必须这样进行转码。很麻烦。但确实可以拿到汉字。 B 在请求页面上开始处,执行请求的编码代码 request.setCharacterEncoding("UTF-8"),把提交内容的字符集设为UTF-8。这样的话,接受此参数的页面就不必在转码了。直接使用String str = request.getParamete("something");即可得到汉字参数。但每页都需要执行这句话。这个方法也就对post提交的有效果,对于get提交和上传文件时的enctype="multipart/form-data"是无效的。稍后下面单独对这个两个的乱码情况再进行说明。 C 为了避免每页都要写request.setCharacterEncoding("UTF-8"),建议使用过滤器对所有jsp进行编码处理。这个网上有很多例子。请大家自己查阅。 3 表单get提交方式的乱码处理方式。 如果使用get方式提交中文,接受参数的页面也会出现乱码,这个乱码的原因也是tomcat的内部编码格式iso8859-1导致。Tomcat会以get的缺省编码方式iso8859-1对汉字进行编码,编码后追加到url,导致接受页面得到的参数为乱码/、。 解决办法: A 使用上例中的第一种方式,对接受到的字符进行解码,再转码。 B Get走的是url提交,而在进入url之前已经进行了iso8859-1的编码处

SSH下mysql中文乱码问题

SSH下mysql中文乱码问题 标签:mysql中文乱码分类:mysql2010-08-25 11:05 1.在hibernate.cfg.xml配置文件中修改如下 环境:Hibernate 3.2 + MySQL5.0(MySQL的编码已设置为utf8) 问题:通过Hibernate向MySQL写入中文后,通过Hibernate取回数据,在console中打印java对象显示正常。但在MySQL Query Browser中看到的是乱码,传给前端的Flex也是乱码。原因:Hibernate的基础还是JDBC,所以一样需要设置characterEncoding! 解决方法: 在hibernate.cfg.xml中应该这样写 jdbc:mysql://localhost:3306/test?useUnic ode=true&characterEncoding=UTF-8 如果用hibernate.properties #hibernate.connection.url jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8 ps:处理中文的话,characterEncoding用GBK一样可以。 但字节编码问题最好的解决方法还是统一使用UTF-8 ----- 我的项目是: jdbc:mysql://localhost:3306/myeshop?useUnicode=tru e&characterEncoding=UTF-8 2.同样在spring里的applicationContext.xml里的数据库连接也要修改: 3.在Web.xml中配置encodingFilter过滤器,在web.xml中加入下面代码 encodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 encodingFilter

相关主题