即便是把页面和项目的编码都统一设置为UTF-8,但由于tomcat的编码是ISO-8859-1,再处理中文URL时,还是会报错,这里最简单的办法,莫过于把tomcat的编码统一为UTF-8,即在server.xml中将如下的语句中添加最后一句,即:URIEncoding="UTF-8"
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8" />
但是由于在tomcat编码是ISO-8859-1的情况下,form表单以post提交的action,并不会报中文乱码的错误。故可用js做如下转换:
<a href='./servlet/MyServlet?name=世界&id=1' onclick="return linkClick(this)">click me</a> <br>
如上有中文的超级链接,将其转化为一个form并且以post方式提交则也不会报错:
function linkClick(linkObject) {
var formObject = document.createElement('form');
document.body.appendChild(formObject);
formObject.setAttribute('method', 'post');
var url = linkObject.href;
var uri = '';
var i = url.indexOf('?');
if(i == -1) {
formObject.action = url;
} else {
formObject.action = url.substring(0, i);
}
if( i >= 0 && url.length >= i + 1) {
uri = url.substring(i + 1, url.length);
}
var sa = uri.split('&');
for(var i = 0; i < sa.length; i++) {
var isa = sa[i].split('=');
var inputObject = document.createElement('input');
inputObject.setAttribute('type', 'hidden');
inputObject.setAttribute('name', isa[0]);
inputObject.setAttribute('value', isa[1]);
formObject.appendChild(inputObject);
}
formObject.submit();
return false;
}
至于post提交中文不乱码而get提交中文会乱码.原因如下:
原来,get提交后是不会经过filter过滤的。如果要get提交中文不乱满,就在server.xml文件中Connector节点加上 URIEncoding="GBK",默认的如果没有URIEncoding的话,会使用ISO-8859-1的字符集的。还有一个方法是:tomcat的connector元素中另外提供了useBodyEncodingForURI参数,其值为boolean型,true代表使用处理body的encoding方法(即request.setCharacterEncoding)来处理URI的编码,这样就可以用一个过滤器来同时处理post和get方法了。
具体详见论坛帖子:
http://www.iteye.com/topic/187949
另外判断一个字符串是不是某种编码,可以用如下方式:
String encode = "ISO-8859-1";
try {
if (str.equals(new String(str.getBytes(encode), encode))) {
String s1 = encode;
return s1;
}
} catch (Exception e) {
e.printStackTrace();
}
转码可用:
if(str!=null){
try {
str=new String(str.getBytes("ISO-8859-1"),"UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
分享到:
相关推荐
Vm中一个超链接URL需要拼接中文作为Get请求的参数。如果直接拼接,传到后台Action的参数对象中后取出会是乱码,需要编码后再拼接到URL上。 解决方法是在Action中添加一个成员变量,保存编码后的中文参数。在vm页面...
HTML超链接中文乱码问题分析及解决方法.docx
在原页面一张图片上添加了一个链接,链接中有中文,于是在跳转过程中出现中文乱码问题,下面给大家分享下解决方案
jsp超链接中文乱码的解决方法,需要的朋友可以参考一下
asp乱码解决大全,解决各种asp乱码问题
解决EXCEL超链接图片用网页打开设置方法
改超链接改超链接改超链接改超链接改超链接改超链接
超链接时,提示系统资源不足,由于IE被恶意软件修改,即使将IE恢复默认设置,也无法超链接!修复方法为恢复IE默认设置,请事先备份注册表!
-- <a href=""></a> -->超链接标签(用于从一个页面链接到另一个页面) 文本超链接 百度 <!-- 不写值 ">百度</a> -->空链接 <a href=""></a>百度 <!-- 百度</a> -->空链接 百度 ...
Python 爬虫之超链接 url中含有中文出错及解决办法 python3.5 爬虫错误: UnicodeEncodeError: 'ascii' codec can't encode characters 这个错误是由于超链接中含有中文引起的,超链接默认是用ascii编码的,所以不...
超链接传值不显示中文,都给你把代码摆上了,下载可以直接使用
如果你的excel文件链了很多外部文件,但由于其文件位置改了,导致失效,这个程序帮你修复之。VB6.0写的
Java实现的超链接,本段代码主要阐述了HyperlinkEvent,JEditorPane,Runtime.getRuntime()的用法,是个很好的例子!~
OUTLOOK内容中的超链接打不开解决办法
易语言 读写 excel中的 超链接 ' excel的Hyperlink对象: ' 例:Hyperlink对象=excel对象.对象型方法 (“Range”, “B1”).读对象型属性 (“Hyperlinks”, ).读对象型属性 (“Item”, 1) ' 上面的语句可以得到...
js超链接伸缩特效.js超链接伸缩特效,js超链接伸缩特效
VC对Excel添加超链接