jsp向后台传中文,tomcat和weblogic下中文乱码解决方法

摘要:
起初在tomcat下调试:这样处理window.location.href="http://t.zoukankan.com//CustomersServlet?groupsName.equals("")){Stringloc=newString;//tomcat下正常groupsName=loc;}这是因为tomcat默认的编码方式为iso-8859-1,在前台用encodeURI编码了一次,你的参数内容便不带有多字节字符了,成了纯粹的Ascii字符串,tomcat容器request.getParameter自动解码一次,注意这里就是按照tomcat默认的编码方式解码的,这样处理下Stringloc=newString;就是将最后的中文转成utf-8编码。后来将项目部到weblogic11gR1上又出现乱码问题。=0){groupsName=URLDecoder.decode;System.out.println;}前台进行两次编码,后台容器自动解码一次,在手动解码一次解码为正常显示中文的编码方式。
前端jsp:GBK编码
var groupsName = "全体组";
window.location.href = "http://t.zoukankan.com/<%=path %>/CustomersServlet?method=service_customer&skillGroups="+groupsName;
后台:GBK编码
String groupsName = request.getParameter("skillGroups");
得到groupsName为乱码。
起初在tomcat下调试:
这样处理
window.location.href = "http://t.zoukankan.com/<%=path %>/CustomersServlet?method=service_customer&skillGroups="+encodeURI(groupsName);
String groupsName = request.getParameter("skillGroups");
if(groupsName!=null&&!groupsName.equals("")){
String loc=new String(groupsName.getBytes("iso-8859-1"),"utf-8"); //tomcat下正常
groupsName = loc;
}
这是因为tomcat默认的编码方式为iso-8859-1,在前台用encodeURI编码了一次,你的参数内容便不带有多字节字符了,成了纯粹的 Ascii 字符串,
tomcat容器request.getParameter("skillGroups")自动解码一次,注意这里就是按照tomcat默认的编码方式解码的,这样处理下 String loc=new String(groupsName.getBytes("iso-8859-1"),"utf-8");就是将最后的中文转成utf-8编码。
后来将项目部到weblogic11gR1上又出现乱码问题。
这样处理
window.location.href = "http://t.zoukankan.com/<%=path %>/CustomersServlet?method=service_customer&skillGroups="+encodeURI(encodeURI(groupsName));
String groupsName =request.getParameter("skillGroups");
if (null != groupsName && groupsName.trim().length() != 0) {
groupsName =URLDecoder.decode(groupsName, "UTF-8");
System.out.println("DECODE::groupsName:"+groupsName);
}
前台进行两次编码,后台容器自动解码一次,在手动解码一次解码为正常显示中文的编码方式。这样好处在于不用考虑所用容器的编码方式。
因为第一次编码,你的参数内容便不带有多字节字符了,成了纯粹的 Ascii 字符串。(这里把编第一次的结果叫成 [STR_ENC1] 好了。[STR_ENC1] 是不带有多字节字符的)
再编一次后,提交,接收时容器自动解一次 (容器自动解的这一次,不管是按 GBK 还是 UTF-8 还是 ISO-8859-1 都好,都能够正确的得到 [STR_ENC1])
然后,再在程序中实现一次 decodeURIComponent (Java中通常使用 java.net.URLDecoder(***, "UTF-8")) 就可以得到想提交的参数的原值。
扩展学习
url参数中带有#号的情况,例如通过url向后台传”递DAAU#####F33“字符串时候,后台接收只能得到"DAAU",#号全部丢失,这个原因估计是浏览器解析的原因
这下encodeURI就不好用了,这时要用到encodeURIComponent,下面说一下二者区别:

js 中encodeURI 与 encodeURIComponent的区别

encodeURI方法返回一个编码的 URI。如果您将编码结果传递给decodeURI,那么将返回初始的字符串。encodeURI方法不会对下列字符进行编码:":"、"/"、";" 和 "?"。请使用encodeURIComponent方法对这些字符进行编码。经过我测试“#”也属于这个特殊字符的范畴,使用encodeURI编码时#是不会被编码的,所以上面场景的问题依然存在的,对于这种输入的内容,肯定是用encodeURIComponent。

免责声明:文章转载自《jsp向后台传中文,tomcat和weblogic下中文乱码解决方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ORA12500错误解决一例jQuery中hover()的事件委托下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Spring Boot -- Spring Boot之@Async异步调用、Mybatis、事务管理等

这一节将在上一节的基础上,继续深入学习Spring Boot相关知识,其中主要包括@Async异步调用,@Value自定义参数、Mybatis、事务管理等。 本节所使用的代码是在上一节项目代码中,继续追加的,因此需要先学习上一节内容。 一、使用@Async实现异步调用 要在springboot中使用异步调用方法,只要在被调用的方法上面加上@Async就可以...

Java多线程2

线程的生命周期 与人有生老病死一样,线程也同样要经历开始(等待)、运行、挂起和停止四种不同的状态。这四种状态都可以通过Thread类中的方法进行控制。下面给出了Thread类中和这四种状态相关的方法。 1 // 开始线程 2 public void start( ); 3 public void run( ); 4 5 // 挂...

基于Android 9.0 电池温度异常提醒

极力推荐Android 开发大总结文章:欢迎收藏Android 开发技术文章大总结 本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容: 一、 Framework 层字符串添加 二、Service 中实时监测 电池异常温度并弹窗提醒用户 检测电池温度,提示用户温度异常,请注意 Android 电池信息状态主要是...

java8中List根据某一字段去重

实体类: package test; public class User { private String userid; private String username; private String age; private String address; public User(String use...

Unity多语言本地化改进版

简介 之前捣鼓过一个通过csv配置游戏多语言支持的小工具,但是发现使用过程中,通过notepad++去进行转码很不方便,并且直接将配置的csv不加密的放在游戏中心里感觉不是很踏实 于是乎~~ 新的方案 1.在PC/MAC平台上解析多语言配置,也就是editor运行环境中解析csv或者excel 2.通过在Editor运行过程中生成多个语言对象,然后序列化并...

【转】 SpringCloud系列——Feign 服务调用

【转】 SpringCloud系列——Feign 服务调用   前言 前面我们已经实现了服务的注册与发现(请戳:SpringCloud系列——Eureka 服务注册与发现),并且在注册中心注册了一个服务myspringboot,本文记录多个服务之间使用Feign调用。 Feign是一个声明性web服务客户端。它使编写web服务客户机变得更容易,本质上就是...