如何用PowerShell将PBIX解压的Layout文件转UTF-8并生成JSON对象
解决PBIX解压后Layout文件转UTF-8可解析JSON的问题
问题根源
PBIX解压后的Report文件夹内的Layout文件实际是**UTF-16LE(带BOM)**编码的JSON文本,直接用PowerShell默认编码读取会导致内容损坏,进而出现JSON转换失败、生成文件带大量NUL字符的问题。
解决方案(无需外部工具)
方案1:直接读取并转换为JSON对象
指定UTF-16LE编码读取文件,直接生成可操作的JSON对象,无需中间文件:
# 替换为你的Layout文件实际路径 $layoutPath = "C:\解压路径\Report\Layout" # PowerShell中-Encoding Unicode对应UTF-16LE编码,匹配Layout文件格式 $jsonObject = Get-Content -Raw -Encoding Unicode $layoutPath | ConvertFrom-Json # 验证示例:输出JSON结构中的Report节点内容 $jsonObject.Report
方案2:转换为UTF-8无BOM的可读JSON文件
如果需要保存为标准UTF-8无BOM格式的JSON文件,执行以下脚本:
$layoutPath = "C:\解压路径\Report\Layout" $outputPath = "C:\目标路径\Layout_clean.json" # 读取原编码内容,转换为UTF-8无BOM格式保存 Get-Content -Raw -Encoding Unicode $layoutPath | Set-Content -Path $outputPath -Encoding utf8NoBOM # 验证转换结果:读取新文件并解析为JSON对象 $validatedJson = Get-Content -Raw $outputPath | ConvertFrom-Json
之前尝试失败的原因
- 第一次操作未指定读取编码,PowerShell默认编码(PS5为ASCII、PS7+为UTF-8)无法正确解析UTF-16LE格式,导致
ConvertFrom-Json收到无效JSON内容报错。 - 第二次操作同样未指定读取编码,读取到损坏的内容写入后出现大量NUL字符;且未显式指定
utf8NoBOM编码,导致生成的文件带BOM标记。
内容的提问来源于stack exchange,提问作者bosskay972
相关产品推荐
相关产品推荐

