被坑死了的中文乱码

最近在调试一个接口。然后,就被中文乱码给坑了。

事情的经过是这样的,领导让我跟其他服务器的接口进行对接,简单点就是我这边暴露一个http的请求地址给对方,然后对方发请求到我这边。然后,对方请求时,使用的是GBK编码的GET请求,然后,中文到我这边就乱码了。

最初,我这边的tomcat使用的是UTF-8编码。然后,接到对方请求后,怎么转都转不过来中文。当初不想改tomcat的配置,我就将(GBK、UTF-8、GB2312、ios-8895-1)这四种编码来回转啊!怎么就转不过来。

后来,没办法。那就只能改我这边tomcat的编码了。把server.xml里面的URIEncoding设置成了GBK编码的格式。然后我就欢天喜地的去找对方调试,并信誓旦旦的说没问题了。但是,请求过来以后,悲剧又来了。还是没有转过来。还是继续乱码,当时跳楼的心都有了(公司是6楼,摔得可疼)。

然后,接下来就是继续找资料,查方法。最后,就把问题的解决点放在了Struts2的国际化,默认编码格式了。Struts2的核心包里面有一个default.properties文件,里面有一个struts.i18n.encoding=UTF-8的设置。也就是说,Struts2默认,UTF-8。悲了个剧的,接下来就是要把这个默认的更改过来。具体的更改方法有两种:

第一,直接用压缩软件打开你的struts核心包,然后找到default.properties文件,将里面的配置改了。但是这个方法不够灵活,因为如果想换其他的格式就悲了个剧了。

第二,在classpath下,增加一个配置文件struts.properties,在这个文件里面你可以设置很多配置来覆盖struts的默认配置。这个也是最灵活的修改。

然后,接下来两个配置都改了,兴奋的去接收请求,还是会有乱码。然后,有研究了一番。最终接收GBK格式的GET请求的接收方法如下:

URLDecoder.decode(httpServletRequest.getParameter("param"), "GBK");

但是,问题又来了。UTF编码格式的有乱码了,继续研究,然后针对UTF-8的接收是这样的,

String param = URLEncoder.encode(httpServletRequest.getParameter("param", "GBK");

String utpParam = URLDecoder.decode(param
, "UTF-8");

最后,总结。上面标红的是需要修改内容。由于我这边的系统,是可以明确知道是什么类型什么编码请求过来,所以我做了一个配置,对于不同的请求使用不同的参数获取方法。但是,对于一些系统。不知道请求的具体格式。我这种方法就不适用。所以,这个后期还是需要继续优化研究的。如果,哪位大神有好的解决方法,也请多多喷水告知。在下细听便是。

时间: 2024-08-11 01:17:29

被坑死了的中文乱码的相关文章

Delphi xe5 控件TIdhttp的用法post,get解决中文乱码问题

网络接口如下图: 浏览器演示如下:http://xxx.xxx.xxx.xxx/web/login!doLogin?data={"password":"yy123","userCode":"yyy123","terminalCode":"123"} 返回信息是一个json格式的字符串:{"errorMsg":"登录成功!","result

教你解决Sublime Text中文乱码问题

前面一篇开始学习solr的时候,做了个入门的示例http://blog.csdn.net/zjc/article/details/24414271 .虽然可以检索出内容,但总和想象的结果有差异--比如,检索"天龙"两个字,按常规理解,就应该只出来<天龙八部>才对,可是竟然也会把<倚天屠龙记>检出来.后来研究了一下,发现系统是这样处理的:无论是抽索引时还是分析检索词时,都把所有文字按单字拆开.这样,刚好<倚天屠龙记>里包含"天"和&

SpringMvc+thymeleaf+HTML5中文乱码问题

SpringMvc+thymeleaf+HTML5环境下遇到中文乱码......(注意是HTML5) 按照以往经验逐个排查,开发环境统一为utf-8编码,服务器也配置了编码过滤器.前台页面也是utf编码的. 郁闷,到底哪里出错了呢? 排错1:开发者工具检查请求,发现我的post请求体(表单)乱码 第一个坑:表单添加:accept-charset="UTF-8",请求体正常.服务器也打印出中文. 排错2:服务器应该没问题,可是页面怎么还是乱码? 百度查有人说可能可能是文件编码不对,即文件

SpringMVC使用Ajax请求返回中文乱码

前言: 最近在写一个JavaWeb后台时采用了spring+MyBatis+MySQL的方式.记录下遇到的关键问题 接口返回数据相关 使用@ResponseBody后返回NUll 说明:刚把后台运行起来,兴高采烈的测试接口数据,结果无论如何都是返回null, 最终通过各种百度,发现原来是没有引入关键的Jar包. 解决办法: 需要引入jackson的jar包(jackson core和jackson mapper),引入后 图: 使用@RequestMapping返回中文乱码 原因分析:(网上基本

(转载)dotnet core 中文乱码 codepages

引子 转载自:http://www.jianshu.com/p/1c9c59c5749a 参考:.Net Core 控制台输出中文乱码 上文中我查阅了一些cli的源码, 闲来无事就继续翻代码, 冥冥之中自有天意, 在无尽的代码中, 我看到了这样一个注释 // by default, .NET Core doesn't have all code pages needed for Console apps. // see the .NET Core Notes in https://msdn.mi

fastreport中文乱码问题

fastreport的中文乱码问题,确实让人头疼,我使用的是delphi6+fastrepport4.7,在4.7版本中,主要表现在以下几种情况. 预览不乱码,保存乱码. 简体不乱码,繁体乱码. 简体系统不乱码,繁体系统乱码. 繁体字,写死在模板里面不乱码,但是在数据流中,显示在Memo中就乱码了. 或者还有其他种情况,反正各种情况都可能有, 百度下fastreport乱码,都是说改源码,但是到对应位置一找,也没有找到相对的代码.问题就是这样的问题,而且fastreport的技术支持完全不行,本

pager-taglib分页中文乱码原理解析

关于使用pager-taglib分页前端传递中文参数乱码问题的解决方案 1.重现问题 在web项目中有时会用到pager-taglib来作为分页的标签,如上图红色框标识所示,当我们需要把页面参数保持的时候我们会在<pg:param />标签中把参数进行传递. 如果你的页面编码为gb2312那这样写是没有问题的,但是如果你的页面编码是utf-8的话那就会出现乱码问题.我尝试了很多方法,编码过滤器,编码拦截器(struts2),传递 参数的时候进行编码然后后台进行解码,还有WEB(如TomCat等

C#写入Oracle 中文乱码问题

这个问题是我刚踏入工作觉得最坑的一个问题,找了很多方法.也问过不少人,但还是没能解决,偶然间返现了新大陆.... 具体问题描述是这样的: 我可以读取Oracle数据库中已有的中文内容,并能正确显示(Oracle中的中文通过SQLplus录入),但当我使用C#程序插入中文记录时,发现数据库中显示为乱码,读取出来也为乱码.我试了很多种编码方式,问题都不能解决. 以下是查找相关资料得到的解决办法: 主要问题是: oracle客户端软件的字符编码与服务器端的字符编码不一致造成的. oracle的字符编码

java Web 中文乱码

参考:http://www.cnblogs.com/haimishasha/p/6117968.html  (关于JAVA字符编码:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换 - 海米傻傻 - 博客园) 参考:http://www.cnblogs.com/haitao-fan/p/3399018.html(浏览器URL编码 - 尼玛范爷 - 博客园) 参考:http://blog.csdn.net/dbb_zifeng/article/details/53304266