有朋友在我的知识星球问我一个问题,关于 ABAP 上传文件到企业微信时,文件名如果包含中文,发送到企业微信群后,中文字符无法正常显示,变成了 #
符号:
从这位朋友提供的 ABAP 代码可以看出,包含中文字符的文件名,在 ABAP 代码准备发送到企业微信时,没有进行编码处理。
我们可以看看 SAP 标准的 Fiori 应用,是如何处理文件名包含中文字符的附件上传的。
我新建一个本地 text 文件,取名为 汪.txt
:
在网上找个工具网站,查询出汉字 汪
的 UTF-8 编码为 E6B1AA:
我们通过 SAP Fiori 应用上传后,在应用上能正常显示这些中文文件名的附件:
在 SAP UI5 JavaScript 代码里,文件名 汪.txt
, 被浏览器支持的原生函数 encodeURIComponent
,编码为 %E6%B1%AA.txt
:
从 Chrome 开发者工具 Network 面板能看到,从 SAP UI5 发送到 ABAP 后台的文件名,确实是编码之后的值:
这个编码之后的值,传递到了 ABAP 后台:%E6%B1%AA.txt
通过 ABAP 工具类方法,cl_http_utility=>if_http_utility~unescape_url
,将编码后的值,重新解码,得到原始值 汪.txt
:
在 SAP CRM 后台系统的 CRMD_ORDER
事务码里,这些中文名称的附件也能正常显示:
回到题目开头朋友提到的问题,在 ABAP 代码里,可以在发送文件之前,将包含中文字符的文件名,通过 ABAP 工具方法 cl_http_utility=>escape_url
进行编码。
data(lv) = cl_http_utility=>escape_url( unescaped = '汪').
但是如果在企业微信服务器端,没有对这个编码后的值,进行类似上文介绍的 ABAP 服务器端的解码操作,最后显示在企业微信里的文件名,就会像下图这样:
网友评论