powershell 集成wix.com商店API|变音符号问题

eh57zj3b  于 5个月前  发布在  Shell
关注(0)|答案(1)|浏览(37)

一个恼人的问题,也许你可以帮助我。试图通过API将数据传递到wix.com上的“新产品”),但有些产品包含本地标志。在服务器端成功处理invoke-webrequest(下面的部分代码)后,我将获得转换后的数据,没有变音符号
尝试强制字符集utf-8,在$body中我获得了正确的结果,

$headers  = @{
     "Content-Type"  = "application/json"
     "Authorization" = "$auth"
     "charset"       = "UTF-8"
            }
[...]
$obj = @{
    "product" = @{
                "name"        = [string]($product.name)
               }
[...]

$body = $obj | convertto-json -depth 3;
Invoke-WebRequest -Headers $headers -Uri $url  -method POST -body $body

字符串
但在服务器上所有的变音符号都不见了.我相信应该有一些可能性来改变它,但似乎需要在服务器端的一些变化.请纠正我,如果我错了.任何帮助表示赞赏.非常感谢所有的答案.

9rnv2umw

9rnv2umw1#

tl;dr

  • $headers哈希表中忽略"charset"条目:
  • 媒体类型application/json默认使用UTF-8 *。
  • 除此之外,charset属性是Content-Type条目的一部分,而不是单独的一个(例如,'Content-Type' = 'text/plain; charset=utf-8'
  • 确保在 Windows PowerShell 和PowerShell(核心)版本 (最高版本为v7.3.x)中的请求正文中使用UTF-8,请通过System.Text.UTF8Encoding显式获取要发布的JSON字符串的UTF-8编码,并将结果([byte[]]数组)传递给Invoke-WebRequest-Body参数:
Invoke-WebRequest -Headers $headers -Uri $url -Method POST -Body (
  [System.Text.Utf8Encoding]::new().GetBytes($body)
)

字符串

背景信息:

  • Windows PowerShell 和**PowerShell (Core) * v7.3.x* 中:
  • 这些版本使用ISO-8859-1作为默认字符编码(v7.0 - v7.3.x选择性地默认为UTF-8,但仅在响应中,并且仅用于媒体类型application/json); ISO-8859-1与Windows-1252基本相同(最常见的“ANSI”编码),除了它在0x 80 - 0x 9 F代码点范围内缺少后者的字符,其中特别包括符号。
  • post UTF-8,您有两个选项
  • 仅当您不使用-Header参数时:使用-ContentType参数并附加charset属性;例如-ContentType 'application/json; charset=utf-8'
  • 这使得PowerShell基于指定的编码 * 自动 * 对[string]类型的-Body参数进行编码。
  • 请注意,在v7.3.x之前,传递给-Header参数的哈希表中的Content-Type条目的等效使用 * 不 * 被接受;这在v7.4+中得到了修复
  • 或者,手动创建一个[byte[]]数组,其中包含构成JSON字符串的UTF-8编码的字节,并将其传递给-Body,如顶部所示。
  • 请注意,对于**GET请求**,您**可能还必须防止误解 * 响应 *;请参阅this answer
  • 在PowerShell(Core)**v7.4+中,不需要 * 额外的努力UTF-8现在幸运的是Invoke-WebRequestInvoke-RestMethod中的一致默认值

相关问题