it-frosch
Goto Top

API Request - korrektes Encoding

Hallo Kollegen,

ich frage eine API (hivebuy) mit Powershell ab und bekomme im JSON die Umlaute falsch kodiert ausgegeben.

Clear-Host
Write-Host "Abteilungen aus Hivebuy auslesen"  

# Departments aus Hivebuy auslesen und in Array $department speichern
$Token = "API-KEY "  
$url = https://api.hivebuy.de/api/company/department/
$content = "application/json"  
$method = "GET"  

$department = Invoke-RestMethod -Uri $url -Method $method -Headers @{"Authorization" = "Bearer $Token"}  -ContentType "application/json; charset=utf-8"  

Wenn ich der API via PATCH oder POST Daten in UTF-8 schicke, bekomme ich auf der Weboberfläche die Umlaute sauber angezeigt und unter Powershell halt nicht.

Was könnte man denn hier noch machen? Irgendwie ist jetzt mein Kopf langsam leer.

Hintergrund für die Fragestellung:
Ich möchte den Beschreibungstext für die Datensätze via API nur dort ändern wo sich der Text gegenüber der Quelle (andere Applikation) geändert hat. Wenn ich die Umlaute falsch dargestellt bekomme, dann sind diese Beschreibungstexte immer im Abgleichslauf drin und ziehen den Abgleich unnötig in die Länge.

Grüße vom it-frosch

Content-ID: 22729021323

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

Ausgedruckt am: 08.11.2024 um 05:11 Uhr

13034433319
13034433319 03.06.2024 aktualisiert um 15:46:48 Uhr
Goto Top
Dann ist entweder dein Skript selbst nicht als UTF-8 (mit BOM (Byte Order Mark), WICHTIG wenn das unter Windows läuft!) gespeichert, oder die Quelldaten sind schon nicht UTF-8 sondern bspw. ANSI 1252 etc..

Gruß
it-frosch
it-frosch 03.06.2024 um 16:19:00 Uhr
Goto Top
@13034433319,

mein Skript ist mit UTF-8 mit BOM angelegt (zeigt mir VS Code auch so an) .

oder die Quelldaten sind schon nicht UTF-8 sondern bspw. ANSI 1252 etc..
Kann ich das irgendwie prüfen? Die Anfrage an Hivebuy läuft schon.

Grüße vom it-frosch
13034433319
Lösung 13034433319 03.06.2024 aktualisiert um 16:46:38 Uhr
Goto Top
Den Inhalt testweise mal in bekannte Formate wie 1252 Unicode, etc. konvertieren, oder schon bei der Anfrage ein anderes Charset angeben..
mein Skript ist mit UTF-8 mit BOM angelegt (zeigt mir VS Code auch so an) .
Besser auch immer selbst mit HEX-Editor kontrollieren.

screenshot
it-frosch
Lösung it-frosch 04.06.2024 um 15:03:24 Uhr
Goto Top
@13034433319

der Hex-Editor zeigt das korrekte Encoding des PS Skripts.

Bei meinen Recherchen bin ich über den Hinweis gestolpert:

Beginning in PowerShell 7.4, character encoding for requests defaults to UTF-8 instead of ASCII.
If you need a different encoding, you must set the charset attribute in the Content-Type header.

Quelle: Powershell Encoding


Daraufhin habe ich auf meinem Rechner auf Powershell 7.4.2 aktualisiert und siehe da,
das Problem existiert nicht mehr.

Danke dir trotzdem für die Hinweise, die mich auf den richtigen Weg gebracht haben.

Grüße vom it-frosch
13034433319
13034433319 04.06.2024 aktualisiert um 17:13:52 Uhr
Goto Top
Hmm, klappt hier selbst mit einer PS 5 problemlos wenn ich den -ContenType Header das charset wie oben setze. Nun denn, wird wohl an der speziellen API liegen.
it-frosch
it-frosch 05.06.2024 aktualisiert um 11:16:12 Uhr
Goto Top
ich habe gestern im ContentType alle für PS 5.1 verfügbaren Werte ausprobiert und nichts hat geholfen.
-ContentType "application/json; charset=utf-8"

Vielleicht habe ich auch noch einen anderen Fehler gemacht, der bisher noch nicht entdeckt wurde.

Ich denke es ist sowieso besser mit einer aktuellen Version zu arbeiten.
Trotzdem Danke für dein Hilfe.

Grüße vom it-frosch