Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 带有cyrrylic问题的Powershell、JSON和UTF8_.net_Json_Powershell - Fatal编程技术网

.net 带有cyrrylic问题的Powershell、JSON和UTF8

.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)

我有一些带有JSON的网站。JSON在utf8代码页中(与RFC中一样)

Web服务器回答:内容类型: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、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”可能会令人烦恼。但情况可能更糟。至少他们是一致的。