it-frosch
Goto Top

JSON parse error - utf-8 codec can not decode byte 0xfc in position 71 invalid start byte

Hallo Kollegen,

ich lese eine XML Datei ein und lege dann via REST API PUT Regest mit einem JSON einen Datensatz an.

Die XML Dateien lese ich so ein:
$xml = [xml](Get-Content .\datei.xml -Encoding utf8)

Beim API Reqest:
  $Token = "XXXXXXXXXXXXXXXX"  
               $url = "https://api.site/"  
               $content = "application/json"  
               $method = "POST"  
               $Data = @{
                    "name"="$($d.NAME)"  
                    "costCenter"="$($d.wert1)"  
                    "legalEntity"="$($d.wert2)"  
                    }
$JsonBody = $Data | ConvertTo-Json
               
# Fehlerprüfung
Write-Log -text "< - Die Fehlerbehandlung wird gestartet."  

try {
 $response2 = Invoke-RestMethod -Uri $url -Method $method -Headers @{"Authorization" = "Bearer $Token"} -ContentType $content -Body $JsonBody  
}

bekomme ich dann die Fehlermeldung:
WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand - {"type":"clientError","errors":[{"code":"parseError","detail":"JSON parse error - 'utf-8' codec can't decode byte 0xfc in position 60: invalid start byte","attr":null}]} wurde abgefangen.  

Das JSON sieht so aus:
{
    "wert1":  "111-1111111111",  
    "name":  "111-1111111111-Süd - TEST - TEST",  
    "wert2":  "2deeb8ee-d760-40c4-9248-f7088a58bf2e"  
}

und ja, ich weiß, dass das 'ü' das Problem ist.
Wie kann ich das korrigieren?

Bin jetzt schon über 1,5Tag dran und habe x Foren- und Blogeinträge gelesen und getestet.
Alles bisher negativ.

Wäre schön wenn mir jemand einen Hinweis geben könnte.

Grüße vom it-frosch

Content-ID: 9918667320

Url: https://administrator.de/contentid/9918667320

Ausgedruckt am: 03.12.2024 um 17:12 Uhr

12168552861
Lösung 12168552861 27.03.2024 aktualisiert um 14:11:01 Uhr
Goto Top
Setz mal explizit den Content-Type mit charset im Header und lass den Parameter -ContentType weg.
-Headers @{"Authorization" = "Bearer $Token"; "Content-Type" = "application/json; charset=UTF-8"}  

Woher kommt $d?

Akzeptiert die uns unbekannte API denn überhaupt Umlaute in den Daten? => Doku dazu lesen.

Gruß pp
it-frosch
it-frosch 27.03.2024 um 15:11:47 Uhr
Goto Top
Hallo puderpader,

Woher kommt $d?
Das ist das Ergebniss aus verschiedenen String Operationen mit deren Hilfe ich mir aus den Feldern der XML den korrekten Wert für "Name" zusammenbaue.

Akzeptiert die uns unbekannte API denn überhaupt Umlaute in den Daten?
ja, deshalb ist das bisher auch noch nicht aufgefallen (ok, waren immer PATCH Aufrufe)


damit
$response2 = Invoke-RestMethod -Uri $url -Method $method -Headers @{"Authorization" = "Bearer $Token"} -ContentType "application/json; charset=UTF-8" -Body $JsonBody  
hat es jetzt funktioniert. :D

Vielen lieben Dank, du hast mir wirklich Ostern gerettet.

grüße vom it-frosch