前后端交互,后端与后端交互中文乱码

前端工程师,当你和后端的文件都是以UTF-8的编码,但是后台大哥告诉你,中文是乱码的,然后你百度了半天,给jQuery.ajax设置了contentType: "application/x-www-form-urlencoded; charset=UTF-8", 但是却并没有卵用,后端告诉你,传过去的字符串都是GBK编码,项目期限快到了,所有人都怀疑是你的问题时。你会想到什么?

我分享一下我的故事。其实主要是讲一下这个BUG如何怎么解决的。我是一个前端工程师,接受了一个项目,处于安全考虑,是前端发送信息给代理的后端,代理后端再发送信息到客户公司的后台,然后数据库保存信息。

后端告诉我,如论怎么设置,我传过去的字符串都是GB2312编码。我决定自己将传过去的字符串进行编码。然后再POST传过去。

var postData=encodeURIComponent(encodeURIComponent(str));

为什么编码两次?因为我的后台是Java语言。

服务器端TOMCAT会自动先做一次decode,所以客户端要编码两次,服务器端只解码一次就OK了。并且这个奇妙的BUG就是无论你怎么改,后台显示你传过去的都是GB2312编码,所以你编码两次,TOMCAT自动解码一次,然后,再在程序中 java.net.URLDecoder(***, "UTF-8")) 就可以得到正确的字符串。不管是按 GB2312还是 UTF-8 还是 ISO-8859-1 。

但是代理后台没有问题正常显示中文,客户的后台保存到数据库确是乱码。虽然都在怀疑我出了问题,不过我直觉告诉这绝对跟我没有关系了。

我观察一下了乱码的形状,

初步判断是是ISO-8859-1的编码形式。开始猜测应该是客户出了问题。

客户的后台程序员建议我们写个junit测试。还发了一个能正确提交中文的示例代码。我观察到他的示例代码有段注释“必须POST提交,否则会以ISO-8859-1编码”。

我猜测可能是提交方式的原因。

后来因为某个原因这个接口信息提交不上去,我登录远超服务器,看到代理后端的TOMCAT显示get请求 400。果然是代理后端是get方式向客户公司的后台发数据。

我叫代理后端的程序员改成POST方式提交到客户之后,数据库就正常了。

写这篇文章虽然轻松,但是找BUG却备受煎熬,尤其是别人很懒不想配合你的时候。

作为前端工程师,必须时刻保持警惕。因为你作为前端,后端的错你是很难发现的。你必须对后端有所了解,才能少被坑。

总结一下知识点:

1.通过乱码判断这是什么编码,方便确认出了什么错。

ISO-8859-1的乱码

GBK的乱码

UTF-8的乱码

2.Java后台,get方式提交的参数编码,如果不设置,默认iso8859-1编码。

3.找BUG就像科学研究,提出假设,找寻证据,验证假设。

讲道理我一个前端工程师是一辈子找不出这种后端制造的BUG,但是我最近学了PHP,对后端有了一定了解,所以PHP是最好的语言。

				
时间: 2024-10-24 17:15:32

前后端交互,后端与后端交互中文乱码的相关文章

jsp中文乱码解决办法

一.JSP页面显示乱码 二.表单提交中文时出现乱码 三.数据库连接 大家在JSP的开发过程中,经常出现中文乱码的问题,可能一至困扰着您,我现在把我在JSP开发中遇到 的中文乱码的问题及解决办法写出来供大家参考. 一.JSP页面显示乱码下面的显示页面(display.jsp)就出现乱码: <html>< head>< title>JSP的中文处理</title> < meta http-equiv="Content-Type" con

rsa加密后端解密出现中文乱码解决方法

今天被这个中文乱码的问题困扰了一天,故事是这样的: 前端rsa加密,后端去解密,但是呢有中文的时候解密出来就乱了,想了各种办法未果: 结论,既然中文乱码,我就不传中文就行了哈.在加密之前用 // 前端加密前将所有中文encoder掉 var en = encodeURIComponent(str); // 后台再转换回来就行了 String result = java.net.URLDecoder.decode(en ,"UTF-8"); 这个方法很巧妙的利用了解决url加密的工具,何

[转]Java后端,应该日常翻看的中文技术网站 -江南白衣

Java后端,应该日常翻看的中文技术网站 1.内容生产者 InfoQ 中文技术第一站,佩服霍老板,真金白银地为中国程序员们生产内容. ImportNew 专门面向Java的内容生产者兼聚合者,偶然也有些面向入门的小白文. 并发编程网 面向高并发,Java,开源的社区. 2. 内容聚合者 现在写博客,没人用RSS读了,在微博里的传播也就一两天,好在有它们负责挖掘整理散落在各个角落的技术文章. 开发者头条 与 <码农周刊> 人气慢慢上来了,我博客阅读量很大一部分源于它, APP也好用. <编

Android 使用JSON格式与服务器交互 中文乱码问题解决

当前是在开发Android 程序时,客户端与服务器端采用JSON传送数据,发现中文乱码问题.不过这个问题的解决办法应该对所有java语言开发的项目都使用. 解决方法是: 1.客户端发送数据之间加上: URLEncoder.encode("要传送的数据", "utf-8"); 对要发送的数据进行字符集设置. 2.服务器端接收数据时加上: URLDecoder.decode("接收的数据", "utf-8"); 对接收的数据进行字

Java应用程序可执行jar文件与服务器交互中文乱码

生成可执行jar文件后,直接双击打开应用,发送Http请求带有中文时,服务器接收到的中文乱码! 解决方式: 1.在cmd命令中执行javaw命令打开jar可执行应用: 打开cmd命令框,输入: javaw -Dfile.encoding=utf-8 -jar D:/client-tool/mobile-client.jar 2.自己编写一个批处理文件打开jar可执行应用: 文件内容: start javaw -Dfile.encoding=utf-8 -jar D:/client-tool/mo

解决springMVC4下使用@ResponseBody的中文乱码问题

由于现在的项目一般都追求前后端分离,依靠Ajax进行通信,这样有助于团队分工.项目维护和后期的平台移植,这就使得后端框架对视图层的功能要求越来越低~ 今天要说的是基于SpringMVC开发web后端时,为了简单而直接在控制器方法中返回json字符串时碰到的中文乱码问题.算是非常基础的问题,大牛请绕道~ 其实我自己一开始也没觉得能有多复杂,认为一搜索就能找到一大把解决方案,所以没有计划耗费多久时间,更没打算转成写一篇博文记录过程.可不曾想到,足足花了我2个半小时,今天看来又要加班了!其实确实在GG

Tomcat中文乱码问题的原理和解决方法

自从接触Java和JSP以来,就不断与Java的中文乱码问题打交道,现在终于得到了彻底的解决,现将我们的解决心得与大家共享. 一.Java中文问题的由来 Java的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦.原因主要有两方面,Java和JSP文件本身编译时产生的乱码问题和Java程序于其他媒介交互产生的乱码问题. 首先Java(包括JSP)源文件中很可能包含有中文,而Java和JSP源文件的保存方式是基于字节流的,如果Java

PHP中文乱码解决办法

一.         首先是PHP网页的编码 1.     php文件本身的编码与网页的编码应匹配 a.     如果欲使用gb2312编码,那么php要输出头:header("Content-Type: text/html; charset=gb2312"),静态页面添加<meta http-equiv="Content-Type" content="text/html; charset=gb2312">,所有文件的编码格式为ANS

关于java中文乱码问题,我有话要说。

最近这两天改两个项目的bug,都遇到了中文乱码的问题,现将问题和解决方案都汇总于此,供大家参考. 如果最开始你把整个项目的编码和tomcat的编码都设置成一样,例如GBK或者GB2312或者UTF-8,应该前后方交互是不会出问题的,但是也会有出现像我这样中途给项目添功能,然后让中文乱码的,这就不知道什么原因导致的了,只知道怎么解决. 问题1:从后台传入前台中文乱码. 解决方案:在处理数据之前,在后台设置 response.setCharacterEncoding("UTF-8"); 这