从jsp上获值添加到数据库时出现乱码问题 怎么解决

从jsp上获值添加到数据库时出现乱码问题 怎么解决,第1张

汉字编码问题。以下是我从网上搜索到的相关汉字编码问题的解决方案,希望能帮到你。1 表单提交的数据,用requestgetParameter(“xxx”)返回的字符串为乱码或者??

2 直接通过url如>

这一次修改好了有什么用啊!应该对整个架构都做一个系统的encode过滤!我建议给你两端代码你看看吧!

第一:

用filter在webxml配置

<filter>

<filter-name>CharacterEncodingFilter</filter-name>

<filter-class>commicsunframeworkfilterCharacterEncodingFilter</filter-class>

<init-param>

<param-name>encode</param-name>

<param-value>utf-8</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>CharacterEncodingFilter</filter-name>

<url-pattern>/</url-pattern>

</filter-mapping>

CharacterEncodingFilter--------------------------- java类

import javaioIOException;

import javaxservlet;

import javaxservlet>

IE缺省对URL后面的参数是不编码发送的,但是Tomat缺省是按ISO8859-1来进行URL编码的,因此才会出错。

方法一:

对URL链接进行二次编码:

<a

onclick="javascript:windowopen(encodeURI(encodeURI('/DispatchActiondoefFormEname=FKRY0001&code_type=中文参数')))">测试</a>

或者单独对参数进行二次编码:

var

code_type

=

"中文参数";

code_type

=

encodeURI(code_type);

code_type

=

encodeURI(code_type);

windowopen("/DispatchActiondoefFormEname=FKRY0001&code_type="+code_type);

Service:

String

code_type

=

requestgetParameter("code_type");

//这句话一定要写,因为如果不写的话编码就是%E5%A6%88%

code_type

=

javanetURLDecoderdecode(code_type,"UTF-8");

有人提出为什么要在客户端对字符串重复编码两次呢?

如果因为项目需要,不能指定容器使用何种编码规则来解码提交的参数,比如:需要接收来自不同页面,不地编码的参数内容时。

(又或者是开发人员被这有点复杂的东西搞得晕头转向,不懂得如何正确的去做好这接收参数的工作)

这个时候,在客户端对参数进行二次编码,可以有效的避开“提交多字节字符”的这个棘手问题。

因为第一次编码,你的参数内容便不带有多字节字符了,成了纯粹的

Ascii

字符串。(这里把编第一次的结果叫成

[STR_ENC1]

好了。[STR_ENC1]

是不带有多字节字符的)

再编一次后,提交,接收时容器自动解一次(容器自动解的这一次,不管是按

GBK

还是

UTF-8

还是

ISO-8859-1

都好,都能够正确的得到

[STR_ENC1])

然后,再在程序中实现一次

decodeURIComponent

(Java中通常使用

javanetURLDecoderdecode(,

"UTF-8"))就可以得到想提交的参数的原值。

简单来说,就是Tomcat服务器会自动帮你做一次URLDecode,再加上你自己在Service代码里面写的URLDecode,一共就是两个Decode了。既然要两次Decode,当然就需要两次Encode了。或许你会问,干脆只Encode一次,然后在java代码里不Decode,呵呵,这个也是不行的,这其实也就是为什么要进行两次Encode的原因吧。

方法二:(经测试不支持IE8)

>

首先把你获取的页面的数据用DB的编码方式重新编码一下再存入DB

如String tstna=requestgetParameter("shijuanming");

改成String tstna=requestgetParameter("shijuanming");

tstna = new String(tstnagetBytes("ISO-8859-1", "GB2312"));

后面的一个编码方式,如果DB是GB2312,那就是这个,如果不是,改成DB相应的编码方式就行了

当然,把mysql 和 jsp上编码格式设置一致即可, 一般默认mysql的编码格式是UTF-8, 建议在jsp中也设置为UTF-8, 如果你不想这么做的话要改数据库格式, 也就是说你所有建立的表都要重新建立成GBK编码。

java web项目中文乱码一般修改以下几个地方即可解决问题:

1、设置jsp页面的编码格式

2、在webxml中配置请求拦截器来转换数据编码格式

3、设置web容器(比如:tomcat等)的默认编码格式

4、设置数据库的编码格式

另外,需要注意的是post和get请求方式提交数据。get方式请求不会走在在webxml中配置的请求拦截器,所以url中尽量不要带有中文,或使用post的请求方式。

希望对你有所帮助!

本文实例讲述了JSP页面中超链接传递中文参数出现乱码问题解决方法。分享给大家供大家参考,具体如下:

这里分析超链接传递中文参数,在接受页面中出现乱码问题的解决方法。

解决方法:

在接受页面里可以如下处理,

复制代码

代码如下:<%=new

String(requestgetParameter("变量名字")getBytes("ISO-8859-1"))

%>

注意这里用的是

new

String()

创建一个新的字符串

例题:

页面一:

<html>

<head>

<title>页面一</title>

</head>

<body>

<a

href="2jspname=张三&password=123456">注意看这里</a>

</body>

</html>

页面二:

<%@

page

language="java"

import="javautil"

pageEncoding="GBK"%>

<html>

<head>

<title>页面二</title>

</head>

<body>

<%=new

String(requestgetParameter("name")getBytes("ISO-8859-1"))

%>

&&

<%=requestgetParameter("password")

%>

</body>

</html>

希望本文所述对大家JSP程序设计有所帮助。

以上就是关于从jsp上获值添加到数据库时出现乱码问题 怎么解决全部的内容,包括:从jsp上获值添加到数据库时出现乱码问题 怎么解决、JSP 页面编码改为UTF-8或GBK,request.getParameter传值乱码、jsp中文乱码问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9799087.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存