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

Logic Apps中Create file特殊字符异常及CSV字段排序问题求助

大型XML转CSV的乱码与字段顺序问题解决

现有流程

  • 获取大型XML文件
  • 通过Compose动作转换为JSON
  • 在Foreach循环中组合所需字段
  • 循环内将内容追加到数组变量
  • 使用Create CSV table动作生成表格
  • 通过Azure File Storage的Create file动作生成CSV文件

遇到的问题

  1. 特殊字符(如Ö)在Create CSV table中显示正常,但最终生成的文件中变为Göteborg,尝试base64ToString但因数据为数组无法使用
  2. Compose转JSON时自动按字母排序字段,导致CSV中City字段排在FirstName之前,无法调整为预期顺序

解决方案

问题1:特殊字符乱码修复

乱码根源是Azure存储的Create file动作默认使用ASCII编码保存内容,需强制指定UTF-8编码:

  • 在Create CSV table之后添加一个Compose动作,使用以下表达式将CSV内容转换为UTF-8编码的Base64字符串:
    base64(encodeUriComponent(body('Create_CSV_table')))
    
  • 在Azure存储的Create file动作中,将文件内容设置为该Compose动作的输出,并将内容格式选择为Base64。
    此操作会确保文件以UTF-8编码保存,特殊字符可正常显示。

问题2:字段顺序调整

Compose转JSON自动排序是因为Power Automate对普通对象的键会默认按字母排序,可通过以下两种方式解决:

方法1:用createObject固定字段顺序

在Foreach循环中,不要直接构造普通对象,改用createObject函数按预期顺序定义字段:

createObject('FirstName', items('Apply_to_each')?['FirstName'], 'City', items('Apply_to_each')?['City'], 'LastName', items('Apply_to_each')?['LastName'])

createObject会严格按照传入的键顺序生成对象,后续Create CSV table将沿用此顺序生成表头。

方法2:用Select动作替代Compose+Foreach(更高效)

如果XML结构固定,直接使用Select动作从XML中提取字段并定义顺序:

  1. 添加Select动作,在"Map"区域按预期顺序手动添加字段(例如先FirstName,再City)
  2. 每个字段的值通过XML路径提取,示例表达式:
    xpath(xml(body('Get_file_content')), '//FirstName/text()')[0]
    
  3. 将Select动作的输出直接传给Create CSV table,字段顺序完全由你在Select中的定义决定,无需担心自动排序问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 17:01:01