如何在Mule 4中使用DataWeave将ANSI编码CSV转UTF-8
inPayload map((item,index)->{
"id":item[0],
"firstName":item[1],
"lastName":item[2],
"age":item[3]
})]]></ee:set-payload>
</ee:message>
</ee:transform>
<logger level="INFO" doc:name="Logger" doc:id="4f4c36ab-0674-4b0b-a6a0-e0c814ddf505" message="#[%dw 2.0
output application/json
payload]"/>
# 解决方案 ### 核心思路 Windows环境下的ANSI编码通常对应`Windows-1252`(ISO-8859-1是其子集,部分场景也适用),核心是**读取时用正确编码解码文件内容,输出时指定UTF-8编码**。 ### 修改后的实现代码 #### 方案1:转换为UTF-8编码的JSON输出 ```xml <flow name="poc_oxaionFlow" doc:id="84217057-820f-4c6d-9d31-41495603da7e" > <http:listener doc:name="Listener" doc:id="6ab756e4-4d76-4d6e-ac85-91005b38caeb" config-ref="HTTP_Listener_config" path="/file"/> <!-- 读取ANSI文件时指定正确编码,直接解析为CSV对象数组 --> <file:read doc:name="Read ANSI CSV" doc:id="9ecd9d90-666e-4f97-9fb8-8a00d6be699a" config-ref="File_Config" path="file_poc_ANSI.CSV" outputMimeType="application/csv; separator=';'" outputEncoding="Windows-1252"/> <ee:transform doc:name="Transform to JSON (UTF-8)" doc:id="6d588ef9-60ca-414c-9178-919df0b2e50e" > <ee:message > <ee:set-payload ><![CDATA[%dw 2.0 output application/json encoding="UTF-8" --- payload map((item, index) -> { id: item[0], firstName: item[1], lastName: item[2], age: item[3] })]]></ee:set-payload> </ee:message> </ee:transform> <logger level="INFO" doc:name="Logger" doc:id="4f4c36ab-0674-4b0b-a6a0-e0c814ddf505" message="#[payload]"/> </flow>
方案2:转换为UTF-8编码的CSV文件输出
如果需要将转换后的内容保存为UTF-8编码的CSV,可添加file:write组件:
<flow name="poc_oxaionFlow" doc:id="84217057-820f-4c6d-9d31-41495603da7e" > <http:listener doc:name="Listener" doc:id="6ab756e4-4d76-4d6e-ac85-91005b38caeb" config-ref="HTTP_Listener_config" path="/file"/> <file:read doc:name="Read ANSI CSV" doc:id="9ecd9d90-666e-4f97-9fb8-8a00d6be699a" config-ref="File_Config" path="file_poc_ANSI.CSV" outputMimeType="application/csv; separator=';'" outputEncoding="Windows-1252"/> <!-- 写入UTF-8编码的CSV文件 --> <file:write doc:name="Write UTF-8 CSV" doc:id="abc123" config-ref="File_Config" path="file_poc_UTF8.CSV" outputMimeType="application/csv; separator=';'" outputEncoding="UTF-8"/> </flow>
关键说明
- 编码选择:优先用
Windows-1252而非ISO-8859-1,因为Windows下的ANSI实际是Windows-1252,支持更多特殊字符。 - 简化读取逻辑:无需通过
payload.^raw二次读取,file:read可直接通过outputMimeType指定分隔符并解析为对象数组,减少冗余操作。 - 输出编码指定:在DataWeave的
output指令中添加encoding="UTF-8",或在file:write中指定outputEncoding="UTF-8",确保最终输出为UTF-8编码。
内容的提问来源于stack exchange,提问作者Ganesh
相关产品推荐
相关产品推荐

