You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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>

关键说明

  1. 编码选择:优先用Windows-1252而非ISO-8859-1,因为Windows下的ANSI实际是Windows-1252,支持更多特殊字符。
  2. 简化读取逻辑:无需通过payload.^raw二次读取,file:read可直接通过outputMimeType指定分隔符并解析为对象数组,减少冗余操作。
  3. 输出编码指定:在DataWeave的output指令中添加encoding="UTF-8",或在file:write中指定outputEncoding="UTF-8",确保最终输出为UTF-8编码。

内容的提问来源于stack exchange,提问作者Ganesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 10:52:29