gpt4 book ai didi

powershell - Powershell ConvertFrom-Json编码特殊字符发行

转载 作者:行者123 更新时间:2023-12-04 01:17:55 32 4
gpt4 key购买 nike

我的Powershell脚本中有此代码,在特殊字符部分上效果不佳。

 $request = 'http://151.80.109.18:8082/vrageremote/v1/session/players'
$a = Invoke-WebRequest -ContentType "application/json; charset=utf-8" $request |
ConvertFrom-Json |
Select -expand Data |
Select -expand players |
Select displayName, factionTag | Out-file "$scriptPath\getFactionTag.txt"

在我的输出文件中,我只会得到“????”对于任何特殊字符。有谁知道我如何在输出文件中显示特殊字符?

最佳答案

Peter Schneider's helpful answerNas' helpful answer都解决了您的方法的一个问题:您需要:

  • 之一:访问.Content返回的响应对象上的Invoke-WebRequest属性,以获取返回的实际数据(作为JSON字符串),然后可以将其传递给ConvertFrom-Json
  • 或:而是使用Invoke-RestMethod,它直接返回数据并将其解析为自定义对象,因此您可以直接使用这些对象,而无需ConvertTo-Json;但是,对于这种情况下的字符编码问题,这不是一个选择,因为需要对JSON字符串进行显式重新编码-参见下文。

  • 但是, 仍然存在字符编码问题,因为在响应 header 中缺少 charset信息的 中,PowerShell会将以UTF-8编码的JSON字符串解释为ISO-8859-1 -encoded返回(自PowerShell 7.0起仍然适用)。

    有两种可能的解决方案(除了切换到PowerShell Core之外):
  • 最好将Web服务修改为在响应 header 的charset=utf-8字段中包括ContenType
  • 如果无法执行此操作,则必须明确地对接收到的字符串重新编码,以更正字符编码的误解。

  • 这是后者的实现:
    $request = 'http://151.80.109.18:8082/vrageremote/v1/session/players'
    $a = Invoke-WebRequest -ContentType "application/json; charset=utf-8" $request

    # $a.Content now contains the *misinterpreted* JSON string, so we must
    # obtain its byte representation and re-interpret the bytes as UTF-8.
    # Encoding 28591 represents the ISO-8859-1 encoding - see https://docs.microsoft.com/en-us/windows/desktop/Intl/code-page-identifiers
    $jsonCorrected = [Text.Encoding]::UTF8.GetString(
    [Text.Encoding]::GetEncoding(28591).GetBytes($a.Content)
    )

    # Now process the reinterpreted string.
    $jsonCorrected |
    ConvertFrom-Json |
    Select -expand Data |
    Select -expand players |
    Select displayName, factionTag | Out-file "$scriptPath\getFactionTag.txt"

    关于powershell - Powershell ConvertFrom-Json编码特殊字符发行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53033242/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com