`
yuyajian
  • 浏览: 15533 次
社区版块
存档分类
最新评论

跨服务中文传输乱码问题总结

 
阅读更多

 

1.问题背景

 

    最近在做内部系统与银行对接的支付网关,其中涉及到跨服务的编码转换问题。

 

    这次遇到的是UTF-8(我们使用的编码)与GBK(某银行使用的编码)的中文传输乱码问题。

 

    刚开始解决乱码问题的时候,心想解决方式无非是:按照编码的格式进行转码。

 

    经过这次问题,对乱码问题有了进一步的认识,原来乱码不仅仅是转入转出格式统一,还涉及到系统编码、IDE工具、tomcat服务等等网络传输带来的问题。

 

 

 

2.解决尝试

 

主要从系统内UTF-8GBK输出、接收系统外传输的GBK数据(输入、输出)两方面考试。

 

    1)系统内UTF-8GBK

 

  • 使用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-8java文件采用UTF-8编码格式进行编译。银行jar包为GBK编码编译,传递GBK编码,调用银行签名算法,报验签失败,最终查看银行jar包代码,问题归根于string.getBytes(),未设置编码格式,采用系统默认编码UTF-8,所以导致验签失败。


最终去掉其他尝试方法,将jar包里签名算法修改为string.getBytes(GBK)解决问题。

 

分享到:
评论

相关推荐

    部署到linux服务器文件名乱码问题

    2. **避免乱码的方法**:为了避免此类问题的发生,可以在传输过程中尽量减少编码转换次数,例如直接使用scp命令在Linux服务器间传输文件,或者确保所有涉及的系统都使用相同的编码标准。 3. **进一步探索**:对于...

    Linux下中文文件名乱码问题的详解 - CSDN博客1

    总结来说,解决Linux下中文文件名乱码问题的关键在于: 1. 确保Linux系统支持中文编码,如GBK和UTF-8。 2. 在处理文件名时进行适当的编码转换,特别是在跨平台操作时。 3. 如果在编程中处理文件名,可能需要编写或...

    C# 将中文乱码转换成中文

    当我们在不同的系统或网络环境中传输或存储文本时,可能会遇到字符编码不一致导致的中文乱码问题。本文将深入探讨如何使用C#语言解决中文乱码问题,将乱码文本正确转换为可读的中文。 ### 核心知识点:字符编码与...

    Flex解决乱码问题

    综上所述,解决Flex应用程序在不同浏览器上出现中文乱码的问题,需要从多个角度入手,包括但不限于设置`useCodePage`属性、调整服务器端的编码配置、正确处理数据传输以及合理选择字体等。通过这些综合措施,可以...

    网页获取JSON中文返回乱码解决方案(java + js)

    总结来说,解决JSON中文乱码问题的关键在于确保JSON数据从生成到传输再到解析的整个过程中,始终使用UTF-8编码。在Java后端,要使用UTF-8编码生成JSON字符串,并在HTTP响应中设置正确的Content-Type;在JavaScript...

    icepdf6.1.1 pdf转图片 无水印,解决中文乱码问题,win linux均可

    《使用icepdf6.1.1进行PDF转图片与中文乱码问题的解决方案》 在IT行业中,PDF格式因其良好的跨平台性和文档保真性而被广泛应用。然而,在处理PDF时,我们有时需要将PDF转换为图片,以便于在网络上传输或者在不支持...

    Linux中文乱码问题.pdf

    在Linux环境中,中文乱码问题常常困扰着用户,尤其是在进行SSH连接、文件传输或跨平台操作时。这个问题通常涉及到字符编码的不匹配和locale设置的不当。以下将深入探讨这一问题及其解决方案。 首先,我们要理解字符...

    java中文乱码字符集解决大全.pdf

    总结,Java中文乱码问题涉及多个层面,包括源文件编码、编译过程、执行环境以及跨平台和网络通信。解决这类问题的关键在于理解编码转换过程,合理设置编码参数,并确保在各个层次保持一致。通过上述方法,可以有效地...

    解决JSP中文乱码问题.doc

    总结来说,解决JSP中文乱码问题的关键在于确保所有环节的编码和解码方式一致,包括源文件、编译、页面声明、HTTP传输、数据库交互以及文件操作等。了解和掌握这些知识点,可以帮助开发者有效地避免和解决中文乱码...

    J2me访问c# Web Services解决了中文乱码

    在本文中,我们将探讨如何使用J2ME(Java 2 Micro Edition)访问由C#编写的Web服务,并解决在传输过程中可能出现的中文乱码问题。首先,我们需要了解J2ME和.NET平台之间的编码差异。 J2ME是Java平台的一个轻量级...

    escape --AJAX和JS传中文乱码的最终解决方案

    在开发Web应用时,我们经常会遇到一个棘手的问题:AJAX和...通过合理运用JavaScript的"escape"、"encodeURIComponent"等函数,并确保统一的编码标准,我们能够有效地避免乱码问题,实现跨平台、跨编码的无缝数据传输。

    JSP中文乱码的产生原因及解决方案

    Java语言核心和class文件基于Unicode,确保了程序的跨平台性,但也为中文乱码问题埋下了伏笔。主要的乱码问题分为两类:一是Java和JSP源文件在编译时产生的乱码,二是Java程序与其他媒介交互时产生的乱码。 **1. ...

    Ajax中文乱码问题解决方案

    ### Ajax中文乱码问题解决方案 在进行Ajax编程时,经常会出现中文乱码的问题,这主要是因为客户端和服务端之间编码设置不一致导致的。为了解决这个问题,我们需要从多个角度出发来确保数据传输过程中字符编码的一致...

    linux下中文文件夹乱码离线安装包convmv

    在Linux系统中,遇到中文文件夹名称显示为乱码的问题是一个常见的困扰,尤其是在进行跨系统文件传输或在不支持UTF-8编码的旧版本Linux环境中。`convmv`工具就是为了帮助用户解决这类问题而设计的。这个离线安装包`...

    java中文乱码.rar

    Java编程语言在处理中文字符时可能会遇到乱码问题,这是由于字符编码不一致或未正确设置编码导致的。本文将深入探讨Java中的中文乱码问题,以及如何解决这些问题。 首先,我们要理解编码的基础知识。在计算机中,...

    java文件JSP文件乱码汇总

    在软件开发过程中,尤其是涉及到国际化或中文处理时,文件编码问题常导致“乱码”现象,严重影响了程序的正常运行和用户体验。本文将深入探讨Java与JSP文件乱码的问题,提供一系列解决方案,确保数据正确无误地在...

    URL传参数时中文乱码解决方法

    在IT领域,尤其是在Web开发中,处理URL传递参数时遇到中文乱码是一个常见的问题,尤其当数据需要跨系统或在不同编码环境下传输时更为显著。本文将深入探讨URL传参数时中文乱码的原因、影响以及如何有效解决这一问题...

    import table文件时乱码解决,LOAD外部文件时乱码解决方法.txt

    解决乱码问题的关键在于准确识别数据源的编码格式,并在数据传输和处理的各个环节保持一致的字符集设置。无论是PL/SQL导入表还是LOAD外部文件,提前检查和设置正确的字符集,以及在必要时使用编码转换工具,都是避免...

    Ajax乱码解决方案(docx)

    总结,解决Ajax乱码问题的关键在于确保编码的统一,从文件编码、请求头、服务器端处理到响应头,每个环节都要设定为UTF-8,以保证数据在传输和处理过程中的正确性。同时,对编辑器的配置也很重要,确保它保存文件时...

    jQuery发请求传输中文参数乱码问题的解决方案

    总结来说,解决jQuery请求中文参数乱码问题的关键在于避免在URL中直接传递中文,改为使用POST请求,或者确保服务器和客户端之间的编码一致。同时,开发过程中要注意与服务器端的沟通,确保双方对字符编码的理解一致...

Global site tag (gtag.js) - Google Analytics