1.问题背景
最近在做内部系统与银行对接的支付网关,其中涉及到跨服务的编码转换问题。
这次遇到的是UTF-8(我们使用的编码)与GBK(某银行使用的编码)的中文传输乱码问题。
刚开始解决乱码问题的时候,心想解决方式无非是:按照编码的格式进行转码。
经过这次问题,对乱码问题有了进一步的认识,原来乱码不仅仅是转入转出格式统一,还涉及到系统编码、IDE工具、tomcat服务等等网络传输带来的问题。
2.解决尝试
主要从系统内UTF-8转GBK输出、接收系统外传输的GBK数据(输入、输出)两方面考试。
(1)系统内UTF-8转GBK
- 使用URLEncoder.encode传输数据,使用时进行decoder
String plainData = java.net.URLEncoder.encode(plainDataR.trim(),"GBK");
java.net.URLDecoder.decode(plainData, "GBK"));
- 页面传输设置编码GBK
<%@ page contentType="text/html; charset=GBK" session="false" %>
(2)接收系统外传输的GBK数据
- 使用string.getBytes()进行转码,需要指定编码格式
string.getBytes()不指定编码将使用系统默认编码或者IDE默认编码进行编译。
String本身没有编码格式,需要指定编码,如果不指定,就会默认使用系统编码。
- 添加filter进行编码设置
获取请求编码,判断若是GBK,将request设置为GBK编码
if("GBK".equals(request.getCharacterEncoding())){
request.setCharacterEncoding(request.getCharacterEncoding());
log.info("====filter======plain="+request.getParameter("Plain"));
}
备注:
注意struts.xml的配置
1).使用StrutsPrepareFilter及StrutsExecuteFilter
添加charsetFilter不生效,最后查明原因是struts2默认编码为UTF-8,经过 StrutsPrepareFilter已将请求过滤成UTF-8编码,再执行charsetFilter已不生效。
在StrutsPrepareFilter和StrutsExecuteFilter之间添加自定义filter.
2) 修改为先执行自定义charsetFilter,再使用FilterDispatcher即可生效。
- 修改tomcat ,取消默认编码设置,增加useBodyEncodingForURI="true"
URIEncoding="UTF-8"
useBodyEncodingForURI="true"
3.问题总结
设置eclipse默认编码为UTF-8,java文件采用UTF-8编码格式进行编译。银行jar包为GBK编码编译,传递GBK编码,调用银行签名算法,报验签失败,最终查看银行jar包代码,问题归根于string.getBytes(),未设置编码格式,采用系统默认编码UTF-8,所以导致验签失败。
最终去掉其他尝试方法,将jar包里签名算法修改为string.getBytes(“GBK”)解决问题。
相关推荐
2. **避免乱码的方法**:为了避免此类问题的发生,可以在传输过程中尽量减少编码转换次数,例如直接使用scp命令在Linux服务器间传输文件,或者确保所有涉及的系统都使用相同的编码标准。 3. **进一步探索**:对于...
总结来说,解决Linux下中文文件名乱码问题的关键在于: 1. 确保Linux系统支持中文编码,如GBK和UTF-8。 2. 在处理文件名时进行适当的编码转换,特别是在跨平台操作时。 3. 如果在编程中处理文件名,可能需要编写或...
当我们在不同的系统或网络环境中传输或存储文本时,可能会遇到字符编码不一致导致的中文乱码问题。本文将深入探讨如何使用C#语言解决中文乱码问题,将乱码文本正确转换为可读的中文。 ### 核心知识点:字符编码与...
综上所述,解决Flex应用程序在不同浏览器上出现中文乱码的问题,需要从多个角度入手,包括但不限于设置`useCodePage`属性、调整服务器端的编码配置、正确处理数据传输以及合理选择字体等。通过这些综合措施,可以...
总结来说,解决JSON中文乱码问题的关键在于确保JSON数据从生成到传输再到解析的整个过程中,始终使用UTF-8编码。在Java后端,要使用UTF-8编码生成JSON字符串,并在HTTP响应中设置正确的Content-Type;在JavaScript...
《使用icepdf6.1.1进行PDF转图片与中文乱码问题的解决方案》 在IT行业中,PDF格式因其良好的跨平台性和文档保真性而被广泛应用。然而,在处理PDF时,我们有时需要将PDF转换为图片,以便于在网络上传输或者在不支持...
在Linux环境中,中文乱码问题常常困扰着用户,尤其是在进行SSH连接、文件传输或跨平台操作时。这个问题通常涉及到字符编码的不匹配和locale设置的不当。以下将深入探讨这一问题及其解决方案。 首先,我们要理解字符...
总结,Java中文乱码问题涉及多个层面,包括源文件编码、编译过程、执行环境以及跨平台和网络通信。解决这类问题的关键在于理解编码转换过程,合理设置编码参数,并确保在各个层次保持一致。通过上述方法,可以有效地...
总结来说,解决JSP中文乱码问题的关键在于确保所有环节的编码和解码方式一致,包括源文件、编译、页面声明、HTTP传输、数据库交互以及文件操作等。了解和掌握这些知识点,可以帮助开发者有效地避免和解决中文乱码...
在本文中,我们将探讨如何使用J2ME(Java 2 Micro Edition)访问由C#编写的Web服务,并解决在传输过程中可能出现的中文乱码问题。首先,我们需要了解J2ME和.NET平台之间的编码差异。 J2ME是Java平台的一个轻量级...
在开发Web应用时,我们经常会遇到一个棘手的问题:AJAX和...通过合理运用JavaScript的"escape"、"encodeURIComponent"等函数,并确保统一的编码标准,我们能够有效地避免乱码问题,实现跨平台、跨编码的无缝数据传输。
Java语言核心和class文件基于Unicode,确保了程序的跨平台性,但也为中文乱码问题埋下了伏笔。主要的乱码问题分为两类:一是Java和JSP源文件在编译时产生的乱码,二是Java程序与其他媒介交互时产生的乱码。 **1. ...
### Ajax中文乱码问题解决方案 在进行Ajax编程时,经常会出现中文乱码的问题,这主要是因为客户端和服务端之间编码设置不一致导致的。为了解决这个问题,我们需要从多个角度出发来确保数据传输过程中字符编码的一致...
在Linux系统中,遇到中文文件夹名称显示为乱码的问题是一个常见的困扰,尤其是在进行跨系统文件传输或在不支持UTF-8编码的旧版本Linux环境中。`convmv`工具就是为了帮助用户解决这类问题而设计的。这个离线安装包`...
Java编程语言在处理中文字符时可能会遇到乱码问题,这是由于字符编码不一致或未正确设置编码导致的。本文将深入探讨Java中的中文乱码问题,以及如何解决这些问题。 首先,我们要理解编码的基础知识。在计算机中,...
在软件开发过程中,尤其是涉及到国际化或中文处理时,文件编码问题常导致“乱码”现象,严重影响了程序的正常运行和用户体验。本文将深入探讨Java与JSP文件乱码的问题,提供一系列解决方案,确保数据正确无误地在...
在IT领域,尤其是在Web开发中,处理URL传递参数时遇到中文乱码是一个常见的问题,尤其当数据需要跨系统或在不同编码环境下传输时更为显著。本文将深入探讨URL传参数时中文乱码的原因、影响以及如何有效解决这一问题...
解决乱码问题的关键在于准确识别数据源的编码格式,并在数据传输和处理的各个环节保持一致的字符集设置。无论是PL/SQL导入表还是LOAD外部文件,提前检查和设置正确的字符集,以及在必要时使用编码转换工具,都是避免...
总结,解决Ajax乱码问题的关键在于确保编码的统一,从文件编码、请求头、服务器端处理到响应头,每个环节都要设定为UTF-8,以保证数据在传输和处理过程中的正确性。同时,对编辑器的配置也很重要,确保它保存文件时...
总结来说,解决jQuery请求中文参数乱码问题的关键在于避免在URL中直接传递中文,改为使用POST请求,或者确保服务器和客户端之间的编码一致。同时,开发过程中要注意与服务器端的沟通,确保双方对字符编码的理解一致...