【发布时间】:2017-03-14 15:35:42
【问题描述】:
我有一些带有 JSON 的网站。 JSON 在 utf8 代码页中(如在 RFC 中)
Web 服务器回答:Content-Type:application/json;字符集=utf-8
我需要转换它并发送给 scom 代理。一切都很好,除了 powershell 将任何西里尔符号破坏为“?”
$api = New-Object -comObject 'MOM.ScriptAPI'
$discoveryData = $api.CreateDiscoveryData(0, $sourceId, $managedEntityId)
$browser = New-Object System.Net.WebClient
$browser.Proxy.Credentials =[System.Net.CredentialCache]::DefaultNetworkCredentials
$rowdata = Invoke-WebRequest 'https://monitoring.net/monitoring.json' -UseBasicParsing
$jsondata = ConvertFrom-Json $rowdata
foreach ($urls in $jsondata.monitors)
{
$instance = $discoveryData.CreateClassInstance("$MPElement[Name='58MCLibrary!F.058MC.Json.Url.Class']$")
$instance.AddProperty("$MPElement[Name='058MCLibrary!058MC.Json.Url.Class']/Name$", $urls.name)
$instance.AddProperty("$MPElement[Name='58MCLibrary!058MC.Json.Url.Class']/Resource$", $urls.resource)
$instance.AddProperty("$MPElement[Name='058MCLibrary!058MC.Json.Url.Class']/Description$", $urls.description)
$discoveryData.AddInstance($instance)
}
$discoveryData
故事是 $urls.name 和 $urls.resource 没问题 - 里面没有 cyrrylic
但是 $urls.description 看起来像 Description ????????????????, ?????????????????? ?????? ???????????? ????????? ?????????????????????
有什么办法解决吗?我尝试将 .NET 的默认 env 代码页设置为 utf8 - 没有更改...
在PS中看到代码页问题很奇怪...
【问题讨论】:
-
如果你只做
$urls.description | Add-Content test.txt -Encoding UTF8会破坏测试文件吗? -
是的,都一样
-
“我尝试将 .NET 的默认 env 代码页设置为 utf8 - 没有更改...”您为此使用了哪些命令?请您提供一个简短的列表吗?
-
旁注:Powershell 是美丽的生物。不幸的是,有时它是一种有缺陷的美丽生物。如果您尝试使用除 UCS-2 LE(LE = Little Endian)以外的任何编码的字符串,它可能会非常苛刻且难以使用。旁注 - 在 microsoft-speak UCS-2 LE 中称为“Unicode”,UCS-2 BE 称为“BigEndianUnicode”。 UCS-2 非常接近 UTF-16。 “Unicode”的这种非标准使用是由于历史原因 - .NET 在 Unicode 成熟之前采用了这种编码。微软的 M-“Unicode”比 UTF-8 更早。
-
示例文件 - rgho.st/7dGqs2MK8 ..它是 100% 的 UTF8
标签: .net json powershell