Logic Apps中Create file特殊字符异常及CSV字段排序问题求助
大型XML转CSV的乱码与字段顺序问题解决
现有流程
- 获取大型XML文件
- 通过Compose动作转换为JSON
- 在Foreach循环中组合所需字段
- 循环内将内容追加到数组变量
- 使用Create CSV table动作生成表格
- 通过Azure File Storage的Create file动作生成CSV文件
遇到的问题
- 特殊字符(如
Ö)在Create CSV table中显示正常,但最终生成的文件中变为Göteborg,尝试base64ToString但因数据为数组无法使用 - 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中提取字段并定义顺序:
- 添加Select动作,在"Map"区域按预期顺序手动添加字段(例如先FirstName,再City)
- 每个字段的值通过XML路径提取,示例表达式:
xpath(xml(body('Get_file_content')), '//FirstName/text()')[0] - 将Select动作的输出直接传给Create CSV table,字段顺序完全由你在Select中的定义决定,无需担心自动排序问题。
内容的提问来源于stack exchange,提问作者Sanktas
相关产品推荐
相关产品推荐

