2016-11-01 6 views
3

Ich habe eine Website mit JSON darauf. JSON ist in UTF-8-Zeichensatz (wie in RFC)Powershell, JSON und UTF8 mit Cyrrylic-Problemen

Web-Server Antwort: Content-Type: application/json; charset = utf-8

ich es konvertieren müssen und SCOM-Agent zu senden. Alles ist in Ordnung, außer dass die Powershell jedes kyrillische Symbol auf '?'

$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 

Geschichte ist, dass $ urls.name und $ urls.resource sind ok - kein cyrrylic darin

Aber urls.description $ aussieht Beschreibung ???????????? ??, ?????????????????? ?????????? ?????????????? ?????????? ????????????????????

Irgendein Weg, es zu beheben? Ich habe versucht Standard-env-Codepage mit .NET auf UTF8 zu setzen - ohne Änderungen ...

Es ist sehr seltsam Codepage Probleme in PS ...

+2

Wenn Sie gerade tun '$ urls.description | Add-Content test.txt -Encoding UTF8' ruiniert es die Testdatei? – TessellatingHeckler

+1

Ja, alle gleich –

+0

"Ich habe versucht, Standard env Codepage mit .NET zu utf8 - keine Änderungen ..." Welche Befehle haben Sie dafür verwendet? Könnten Sie bitte eine kurze Liste bereitstellen? –

Antwort

1

$ rowData = Invoke-WebRequest ‚123/monitoring.json zu sehen '-UseBasicParsing

$ utf8_ready_data = [System.Text.Encoding] :: UTF8.GetString ($ rowdata.RawContentStream.ToArray());

Sieht aus wie Invoke-WebRequest utf8 in 2016 Jahre hasst ..

+0

Ja, das ist ein Mist, dass Msoft diesen Zweig der Entwicklung gewählt hat. Wenn sie zwischen 1995 und 2000 einen Schritt machen würden, um UTF-8-zentriert zu sein, hätten wir eine schöne, großartige Umgebung, mit der wir arbeiten könnten. Ach. Dieser "Unicode" kann lästig sein. Aber es könnte schlimmer sein. Zumindest stimmen sie damit überein. –