【问题标题】:Powershell removing escape chars on conversionPowershell 在转换时删除转义字符
【发布时间】:2020-07-28 12:42:11
【问题描述】:

我有一些自动生成的 json 文件需要使用 PowerShell 进行修改。但是,当我使用 ConvertFrom-Json 时,在某些情况下会丢失字符。

我尝试过使用

ForEach-Object {
    [System.Text.RegularExpressions.Regex]::Unescape($_)
}

处理转义字符,但没有运气

字符串被修改的例子

<?xml version=\"1.0\" encoding=\"UTF-16\"?><ExchangeRates>

变成了

<?xml version="1.0" encoding="UTF-16"?><ExchangeRates>

丢失反斜杠。

如何在不转换文件的无意部分的情况下解决这个问题?

【问题讨论】:

  • 首先不要使用Regex.Unescape。你需要做什么?
  • 你能给我们展示一个发生这种行为的完整示例 json 字符串吗?
  • @MathiasR.Jessen xml 行是我测试它的 json 示例文件的一部分。 "Compose": { "runAfter": { "Transform_Exchange_Rates": [ "Succeeded" ] }, "type": "Compose", "inputs": "&lt;?xml version=\"1.0\" encoding=\"UTF-16\"?&gt;&lt;ExchangeRates&gt;" },
  • 在这种情况下,我不太确定我是否理解您的问题 - PowerShell 正确解码了 json 文件中的文字字符串值。 ConvertTo-Json 将(也正确地)再次添加转义序列
  • 对我来说$(Get-Content "C:\temp\test.txt") | Convertfrom-Json | ConvertTo-Json -Compress 给出:{"Compose":{"runAfter":{"Transform_Exchange_Rates":"Succeeded"},"type":"Compose","inputs":"\u003c?xml version=\"1.0\" encoding=\"UTF-16\"?\u003e\u003cExchangeRates\u003e"}}。好像没问题。

标签: json regex powershell


【解决方案1】:

我在干净的环境中重新进行了测试,发现当我将内容加载到 PowerShell 中的子对象时,我有一些强制 UTF8 编码的东西,在这种情况下,这会导致字符转换为转义字符,从而导致在我的情况下,它们被什么都取代了

tldr;执行 convertfrom-json 时的 UTF8 格式导致问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-26
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多