.net 带有cyrrylic问题的Powershell、JSON和UTF8
我有一些带有JSON的网站。JSON在utf8代码页中(与RFC中一样) Web服务器回答:内容类型:application/json;字符集=utf-8 我需要将其转换并发送给scom代理。一切正常,除了powershell将任何西里尔字母符号销毁为“?”.net 带有cyrrylic问题的Powershell、JSON和UTF8,.net,json,powershell,.net,Json,Powershell,我有一些带有JSON的网站。JSON在utf8代码页中(与RFC中一样) Web服务器回答:内容类型:application/json;字符集=utf-8 我需要将其转换并发送给scom代理。一切正常,除了powershell将任何西里尔字母符号销毁为“?” $api = New-Object -comObject 'MOM.ScriptAPI' $discoveryData = $api.CreateDiscoveryData(0, $sourceId, $managedEntityId)
$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、description、description
有办法解决吗?我尝试将.NET的默认环境代码页设置为utf8-没有更改
在PS中看到代码页问题非常奇怪。$rowdata=Invoke WebRequest'123/monitoring.json'-UseBasicParsing $utf8_ready_data=[system.Text.Encoding]::utf8.GetString($rowdata.RawContentStream.ToArray())
看起来Invoke WebRequest在2016年不喜欢utf8。如果你只是做
$url.description | Add Content test.txt-编码utf8
它会破坏测试文件吗?是的,同样的“我尝试将默认环境代码页with.NET设置为utf8-无更改…”你使用了什么命令?你能提供一个短名单吗?旁注:Powershell是美丽的生物。。不幸的是,有时一个有缺陷的美丽的生物。如果您尝试使用除UCS-2LE(LE=Little Endian)之外的任何编码的字符串,这可能会非常苛刻且难以处理。旁注-在微软讲UCS-2LE称为“Unicode”,UCS-2BE称为“BigEndianUnicode”。UCS-2与UTF-16非常接近。“Unicode”的这种非标准使用是由于历史原因——.NET在Unicode成熟之前就采用了这种编码。微软的M-“Unicode”比UTF-8.Sample文件更旧-…微软选择了UTF-8.Sample文件的开发分支,这是一个令人沮丧的错误。如果他们能在1995-2000年间迈出一步,以UTF-8为中心。。。我们会有一个很好的,很棒的工作环境。唉。这种“Unicode”可能会令人烦恼。但情况可能更糟。至少他们是一致的。