Powershell ConvertFrom-Json 编码特殊字符问题

2023-11-22

我的 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"

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


彼得·施奈德的有用回答 and 纳斯的有用回答两个地址one你的方法有问题:你需要:

  • 要么: 访问.Content返回的响应对象上的属性Invoke-WebRequest得到实际的data返回(作为 JSON 字符串),然后您可以将其传递给ConvertFrom-Json.

  • or: use Invoke-RestMethod相反,它返回数据directly and 将其解析为自定义对象,因此您可以直接使用这些对象,而不需要ConvertTo-Json;然而,对于字符编码问题,例如在本例中,这是not一个选项,因为需要对 JSON 字符串进行显式重新编码 - 见下文。

然而,你还有一个字符编码 problem,因为,在不存在charset中的信息response header,PowerShell 将返回的 UTF-8 编码 JSON 字符串解释为ISO-8859-1-编码,在 Windows PowerShell 以及PowerShell(核心) 至 v7.3.3, except that v7.0+ 默认为 UTF-8JSON, 具体来说。
v7.4+将使用UTF-8 作为general default,即对于all媒体类型。

有两种可能的解决方案:

  • 优选地,修改网络服务以包括charset=utf-8在响应头中ContenType field.

  • 如果你做不到,你必须这样做执行您自己的解码,基于原始字节响应主体,可通过.RawContentStream财产:

这是后者的实现:

# Note that there's no point in using 
# -ContentType  "application/json; charset=utf-8" in this case,
# as -ContentType only applies to data sent *to* the web service.
$request = 'http://151.80.109.18:8082/vrageremote/v1/session/players'
$a = Invoke-WebRequest $request

# $a.Content cannot be used, because it contains the *misinterpreted* JSON string,
# but $a.RawContentStream provides access to the raw bytes,
# which you can decode into a string with the encoding of choice.
$jsonCorrected = 
  [Text.Encoding]::UTF8.GetString(
    $a.RawContentStream.ToArray()
  )

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

Note:

  • 这个答案提供便利功能ConvertTo-BodyWithEncoding,它包装了上面的功能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Powershell ConvertFrom-Json 编码特殊字符问题 的相关文章

随机推荐

  • 如何在 MongoDB 聚合中使用 $lookup 作为 INNER JOIN?

    我用过 lookup在我的聚合查询中 但正如我所见 它的工作原理是LEFT OUTER JOIN 我想获取完全匹配的文档 INNER JOIN lookup 有什么办法可以完成吗 这是我的inventory收藏 1 id 1 sku abc
  • 我想在运行时获取变量的类型

    我想在运行时获取变量的类型 我该怎么做呢 因此 严格来说 变量的类型 始终存在 并且可以作为类型参数传递 例如 val x 5 def f T v T v f x T is Int the type of x 但取决于你想要什么do
  • 使用 python nltk 查找两个网页之间的相似性?

    我想知道两个网页是否相似 有人可以建议带有 wordnet 相似性函数的 python nltk 是否有帮助以及如何帮助 在这种情况下使用的最佳相似度函数是什么 The spotsigs提到的论文乔伊塞斯坎解决了内容重复检测问题 其中包含大
  • Nuxt:如何防止nuxt-link转到另一个页面?

    我需要停下来nuxt link转到另一个页面 这是我的代码
  • Flask:当用户在执行长进程时关闭浏览器会发生什么?

    情况如下 我有一个应用程序 它使用 Angularjs 作为前端 使用 Flask 作为后端 我有一条看起来像这样的路线 app route api route1 methods POST def route1 result some pa
  • GUI/TUI Linux 库

    是否有任何 UI 库可以从同一源构建文本用户界面 ncurses 和图形用户界面 GTK QT 我知道 debconf 可以与各种前端一起使用 我想构建类似但可编程的东西 该库支持 YaST 独立性 使用一个代码库执行 ncurses gt
  • Rails 中列名的别名

    在我的数据库中有 删除 或 监听控制 等列名 这些无法更改 因此我想为这些名称起别名以避免我的应用程序出现问题 I found 下面的代码但它已经过时了 2005 年 8 月 5 日 并且不适用于 Rails 3 module Legacy
  • 奇数时选择最后一个子项,偶数时选择最后 2 个子项

    我所处的情况是显示的元素数量是可变的 我需要一个奇怪的解决方案 但我无法实现 我什至怀疑它是否只能通过 css 来实现 如果元素数量是奇数 我需要选择最后一个子元素 如果元素数量是偶数 我需要选择最后 2 个子元素 我一直在尝试nth la
  • Yq:检索对象键名称

    我有一个 YAML 文件 在我的例子中是 docker compose 文件 如下所示 networks foo some opts covfefe bar some opts such wow services apache image
  • 空 HTML href 会导致 IE 中列出目录

    我有一个带有单独 HTML 文件的网站 实际上是 shtml 但这对于这个问题来说并不重要 这些 shtml 文件包含一张图片以及一个前进和后退按钮 因此我可以切换回预览 shtml 文件或浏览到下一个文件 就像在画廊中一样 所有这些 sh
  • 私有字段的 Scala 名称修改和 JavaFX FXML 注入

    下面的例子和解释很长 所以这是我的问题的要点 当使用坚持执行字段注入 在真正应该保持私有的字段上 的框架时 如何处理scalac对私有字段的名称修改 我正在 Scala 中使用 ScalaFX JavaFX 和 FXML 编写一个应用程序
  • Bootstrap 4 导航栏垂直显示而不是水平显示

    我已经按照教程中的方式构建了一个导航栏 但不知何故 我的导航栏在应该水平显示时却垂直显示 关于如何解决这个问题有什么想法吗 提前致谢
  • CakePHP SwiftMailer SMTP TLS OpenSSL 错误 SSL3_GET_RECORD:版本号错误

    我正在尝试使用我在这里找到的 CakePHP SwiftMailer 组件发送电子邮件 http bakery cakephp org articles sky l3ppard 2009 11 07 updated swiftmailer
  • MongoDB 自定义序列化器实现

    我是 MongoDB 新手 正在尝试让 C 驱动程序序列化 F 类 我让它使用可变 F 字段和无参数构造函数与类自动映射器一起工作 但实际上我需要保留不变性 因此我开始考虑实现 IBsonSerializer 来执行自定义序列化 我还没有找
  • 通过 Jenkins API 获取子项目构建

    我配置了一个 Jenkins 项目 我在这里称之为 SuperJob 来简单地按顺序调用几个不同的其他 jenkins 项目 我希望能够通过 Jenkins API 找出该 SuperJob 特定构建号的所有子项目的结果 查看发布的代码HE
  • Vim:突出显示 incsearch 中的所有匹配项

    我正在使用incsearch and hlsearch选项 按 Enter 键后 所有匹配项都会突出显示 但只有我键入时的第一个匹配项 我想在输入时突出显示所有匹配项 我怎样才能得到这种行为 您可以使用incsearch vim 插件 In
  • 修改 Pods 文件后 Cocoa pod 出现问题

    当我更改 Pods 文件时 在命令 pod install 后收到此错误 Users mac Documents Projects Test Podfile 1 syntax error unexpected tINTEGER expect
  • 将日期从 JSON 反序列化为 Typescript 中的日期

    我从后端得到一个如下所示的 JSON schedulingId 7d98a02b e14f 43e4 a8c9 6763ba6a5e76 schedulingDateTime 2019 12 28T14 00 00 registration
  • 提交表单后如何使用 WWW::Mechanize 下载文件?

    我有代码 usr bin perl use strict use WWW Mechanize my url http divxsubtitles net page subtitleinformation php ID 111292 my m
  • Powershell ConvertFrom-Json 编码特殊字符问题

    我的 powershell 脚本中有这段代码 但它在特殊字符部分表现不佳 request http 151 80 109 18 8082 vrageremote v1 session players a Invoke WebRequest