当前位置: 首页 > news >正文

XML Encoding = ‘GBK‘ after STRANS,中文乱码

最近帮同事处理了一个中信银行银企直连接口的一个问题,同事反馈,使用STRANS转换XML后,encoding始终是’utf-16’,就算指定了GBK也不行。尝试了很多办法始终不行,发到银行的数据中,中文始终是乱码。
在这里插入图片描述
Debug使用HTML视图看报文时也可以看到中文是乱码。
在这里插入图片描述

在这里插入图片描述

解决方案:

使用cl_sxml_string_writer=>create创建一个GBK编码的对象 ,用来做为STRANS的结果,最重要的是直接发转了编码后的XSTRING过去,不要 转STRING。因为我们的程序是UNICODE的,只要转成STRING,中文就会变成乱码。
返回的结果也一样,看下XSTRING,可以正常显示,如果直接转成STRING就也会变乱码。
在这里插入图片描述

主要代码:

DATA: lv_url     TYPE string.DATA: lo_xml TYPE REF TO cl_sxml_string_writer.
DATA: x_xml TYPE xstring.
DATA: jsonstr TYPE  string.
DATA:  xmlstr TYPE string.lo_xml = cl_sxml_string_writer=>create(  encoding = 'GBK'no_empty_elements = 'X'  ).TRY .CALL TRANSFORMATION zqbtest_sample31SOURCE header =  header[]item = item[]RESULT XML lo_xml.CATCH cx_st_error INTO lo_oref .lv_msg  = lo_oref->get_text( ) .WRITE: / 'Error message:',lv_msg.
ENDTRY.x_xml = lo_xml->get_output( ).lv_url = 'http://192.168..:'.cl_http_client=>create_by_url(
EXPORTINGurl                = lv_url
IMPORTING
client               = DATA(lo_http_client)
EXCEPTIONSargument_not_found = 1plugin_not_active  = 2internal_error     = 3OTHERS             = 4 ).lo_http_client->propertytype_logon_popup = lo_http_client->co_disabled.CALL METHOD lo_http_client->request->set_content_typeEXPORTINGcontent_type = 'text/xml; charset=GBK'.
CALL METHOD lo_http_client->request->set_method( 'POST' ).CALL METHOD lo_http_client->request->set_dataEXPORTINGdata = x_xml.lo_http_client->send(
EXCEPTIONShttp_communication_failure = 1http_invalid_state         = 2 ).IF sy-subrc <> 0."操作失败,获取失败原因lo_http_client->get_last_error( IMPORTING message = DATA(lv_msg1) ).EXIT.
ENDIF.lo_http_client->receive(
EXCEPTIONShttp_communication_failure = 1http_invalid_state         = 2http_processing_failed     = 3 ).
IF sy-subrc <> 0 ."操作失败,获取失败原因lo_http_client->get_last_error( IMPORTING message = lv_msg ).EXIT.
ENDIF.DATA(response) = lo_http_client->response->get_data( ).
*  ev_response = response.CALL METHOD lo_http_client->close.
http://www.lryc.cn/news/377609.html

相关文章:

  • C 语言通用MySQL 功能增删查改功能.
  • Java学习 - MySQL表 增减删查
  • 力扣SQL50 有趣的电影 简单查询
  • 01. Java并发编程简介
  • 使用Node.js+Express开发简单接口
  • 【Python】使用OpenCV特征匹配检测图像中的【特定水印】
  • 基于 Clang和LLVM 的 C++ 代码静态分析工具开发教程
  • Mathtype与word字号对照+Mathtype与word字号对照
  • PHP 8.4有哪些新功能值得关注
  • PyCharm新手入门
  • [Linux] 系统管理
  • Xcode无法使用设备:Failed to prepare the device for development
  • AWS无服务器 应用程序开发—第十二章 AWS Step Functions
  • Linux tcpdump详解
  • vue2实现打印功能(vue-print-nb的实现)
  • 某全国增值税发票查验平台 接口JS逆向
  • 前端练习小项目——视觉冲击卡片
  • 从0到1:手动测试迈向自动化——手机web应用的自动化测试工具
  • 磁盘未格式化:深度解析、恢复策略与预防措施
  • Qwen2在Java项目中如何实现优雅的Function_Call工具调用
  • 【SPIE独立出版 | 往届均已完成EI检索】2024云计算、性能计算与深度学习国际学术会议(CCPCDL 2024)
  • MYSQL 四、mysql进阶 4(索引的数据结构)
  • 360vr党建线上主题展立体化呈现企业的文化理念和品牌形象
  • docker通过容器id查看运行命令;Portainer监控管理docker容器
  • XMind 2024软件最新版下载及详细安装教程
  • 代码随想录算法训练营第四十四天 | 322. 零钱兑换、279.完全平方数、139.单词拆分、多重背包理论基础、背包问题总结
  • 开源AGV调度系统OpenTCS中的路由器(router)详解
  • 关于下载 IDEA、WebStorm 的一些心得感想
  • C#使用Scoket实现服务器和客户端互发信息
  • 【经验分享】SpringCloud + MyBatis Plus 配置 MySQL,TDengine 双数据源