当前位置: 首页 > 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.

相关文章:

  • 电子设计新宠SmartEDA:揭秘其爆红背后的神秘力量
  • 智慧在线医疗在线诊疗APP患者端+医生端音视频诊疗并开处方
  • 2024.6最新版eclipse下载与安装(汉化教程)超详细教程来咯!!!包懂的
  • 如何使用nginx部署https网站(亲测可行)
  • GIT 合拼
  • 14-Kafka-Day03
  • Linux 系统中的 /dev/null 文件
  • HarmonyOS父子组件传递参数
  • ls命令的参数选项
  • 【初阶数据结构】二叉树(附题)
  • 大厂笔试真题讲解—京东23—夹吃棋
  • 线性代数|机器学习-P15矩阵A的低秩变换下的逆矩阵
  • Java中的Socket编程详解
  • 利用nodejs实现图片上传后端,并实现回显
  • 内存优化技巧:让数据处理更高效
  • 【Leetcode】101. 对称二叉树
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • 10个最佳ES6特性 ES7与ES8的特性
  • 345-反转字符串中的元音字母
  • C++类中的特殊成员函数
  • Hibernate最全面试题
  • MySQL用户中的%到底包不包括localhost?
  • React 快速上手 - 07 前端路由 react-router
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • 飞驰在Mesos的涡轮引擎上
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 如何设计一个微型分布式架构?
  • 实习面试笔记
  • 手写一个CommonJS打包工具(一)
  • 算法之不定期更新(一)(2018-04-12)
  • 通信类
  • 微信小程序--------语音识别(前端自己也能玩)
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • ​14:00面试,14:06就出来了,问的问题有点变态。。。
  • ‌内网穿透技术‌总结
  • #DBA杂记1
  • #pragma 指令
  • ()、[]、{}、(())、[[]]命令替换
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (Matlab)使用竞争神经网络实现数据聚类
  • (vue)el-cascader级联选择器按勾选的顺序传值,摆脱层级约束
  • (未解决)macOS matplotlib 中文是方框
  • (一一四)第九章编程练习
  • (转)菜鸟学数据库(三)——存储过程
  • (转)关于多人操作数据的处理策略
  • (转)项目管理杂谈-我所期望的新人
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • ./configure,make,make install的作用(转)
  • .NET 5种线程安全集合
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .NET Core中Emit的使用
  • .net web项目 调用webService
  • .NET 表达式计算:Expression Evaluator
  • .Net的C#语言取月份数值对应的MonthName值