使用Camunda REST引擎实现任务评论国际化时波斯语返回乱码问题
核心根因按优先级排列如下:
1. Tomcat HTTP连接器编码配置缺失
默认Tomcat的HTTP/1.1连接器响应输出默认采用ISO-8859-1(Latin-1)字符集,该字符集不支持波斯语等非拉丁Unicode字符。你配置的JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF-8"仅作用于JVM本地文件读写、字符串默认编码等场景,HTTP连接器的编码配置优先级更高,不受该参数影响。
你可以检查Tomcat根目录/conf/server.xml中的<Connector>标签,默认配置未添加UTF-8相关参数:
<!-- 默认配置,未指定编码 --> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
需补充编码参数才能让响应输出默认采用UTF-8:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" useBodyEncodingForURI="true" />
2. Camunda REST接口未显式指定响应字符集
部分版本的Camunda REST API返回JSON响应时,未在Content-Type响应头中携带charset=UTF-8参数,会直接继承Tomcat连接器的默认编码,导致波斯语字符在转码为ISO-8859-1时无法映射,被替换为问号占位符。你可以通过Postman查看GET接口的响应头,如果Content-Type的值为application/json而不是application/json;charset=UTF-8即可确认该问题。
3. JDBC数据库连接读取编码配置缺失
如果上述两个配置都正常仍有问题,需要检查Camunda连接数据库的JDBC URL是否未指定编码参数。以MySQL为例,如果JDBC URL未添加useUnicode=true&characterEncoding=UTF-8参数,即便数据已经以UTF-8格式存入数据库,读取时JDBC驱动会默认用ISO-8859-1转码,也会出现乱码。
该场景优先级较低,因为你已经确认POST接口可以正常写入波斯语内容到数据库,说明写入链路的编码是正常的,仅读取链路异常时才需要排查。
内容的提问来源于stack exchange,提问作者Simin Ghasemi

