一个恼人的问题,也许你可以帮助我。试图通过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
字符串
但在服务器上所有的变音符号都不见了.我相信应该有一些可能性来改变它,但似乎需要在服务器端的一些变化.请纠正我,如果我错了.任何帮助表示赞赏.非常感谢所有的答案.
1条答案
按热度按时间9rnv2umw1#
tl;dr
$headers
哈希表中忽略"charset"
条目:application/json
默认使用UTF-8 *。charset
属性是Content-Type
条目的一部分,而不是单独的一个(例如,'Content-Type' = 'text/plain; charset=utf-8'
)System.Text.UTF8Encoding
显式获取要发布的JSON字符串的UTF-8编码,并将结果([byte[]]
数组)传递给Invoke-WebRequest
的-Body
参数:字符串
背景信息:
application/json
); ISO-8859-1与Windows-1252基本相同(最常见的“ANSI”编码),除了它在0x 80 - 0x 9 F代码点范围内缺少后者的字符,其中特别包括€
符号。-Header
参数时:使用-ContentType
参数并附加charset
属性;例如-ContentType 'application/json; charset=utf-8'
[string]
类型的-Body
参数进行编码。-Header
参数的哈希表中的Content-Type
条目的等效使用 * 不 * 被接受;这在v7.4+中得到了修复[byte[]]
数组,其中包含构成JSON字符串的UTF-8编码的字节,并将其传递给-Body
,如顶部所示。GET
请求**,您**可能还必须防止误解 * 响应 *;请参阅this answer。Invoke-WebRequest
和Invoke-RestMethod
中的一致默认值。