Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

MSXML2.XMLHTTP30 Encoding Problem , Umlaute verkrüppeln auf dem Server

Forumthread: MSXML2.XMLHTTP30 Encoding Problem , Umlaute verkrüppeln auf dem Server

MSXML2.XMLHTTP30 Encoding Problem , Umlaute verkrüppeln auf dem Server
24.01.2020 09:29:40
Filip
Hallo Forum ,
ich versuche Daten an die Facebook Graph API zu mit dem HTTP Client aus Excel zu senden. Leider habe ich ein Encoding Problem, sodass Sonderzeichen und Umlaute in Facebook nicht richtig dargestelt werden . Ich formatiere mir ein JSON in einem einfachen String den dann in ein Bytearray konvertiere ;
Dim sPostData as String
Dim bSendBuffer() As Byte
sPostData = "Das ist mein JSON Content... in dem zb ÜÖÄ vorhanden sind "
bSendBuffer = StrConv(sPostData, vbFromUnicode)
Dim xmlhttp As New MSXML2.XMLHTTP30
With xmlhttp
.Open "POST", sUrl, False
.setRequestHeader "Content-Type", "multipart/form-data;" _
& "boundary=" & BOUNDARY
.send bSendBuffer
End With
Ich habe bereits versucht beim Content-Type hinter From data utf-8 oder iso-8859-1 zu stellen, was aber keinen Effekt hat... Im Internet habe ich ein paar hinweise auf einen adodb.stream gefunden, damit bin ich aber auch nicht weiter gekommen. Es wird viel beschrieben, dass es Probleme mit Enconding bei empfangenen Inhalten gibt, aber ich habe niemand gefunden, der beschreibt, dass die Daten auf dem Server falsch encodiert ankommen...
Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: MSXML2.XMLHTTP30 Encoding Problem , Umlaute verkrüppeln auf dem Server
24.01.2020 11:00:14
Filip
So ich habe eine Lösung gefunden, scheinbar hat die StrConv Funktion von VBA Ihre engen Grenzen...
unter folgendem Link hat jemand seine eigene Unicode to UTF8 Funktion geschrieben, die habe ich nun genutzt und habe ein perfektes Ergebnis....
https://www.di-mgt.com.au/howto-convert-vba-unicode-to-utf8.html
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

MSXML2.XMLHTTP30: Encoding-Probleme mit Umlauten lösen


Schritt-für-Schritt-Anleitung

Um das Problem mit der Encoding von Umlauten in Excel zu lösen, kannst du folgende Schritte befolgen:

  1. Erstelle einen neuen VBA-Modul:

    • Öffne Excel, drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu starten.
    • Klicke auf Einfügen > Modul.
  2. Füge den folgenden Code ein:

    Dim sPostData As String
    Dim bSendBuffer() As Byte
    Dim xmlhttp As New MSXML2.XMLHTTP30
    
    sPostData = "Das ist mein JSON Content... mit ÜÖÄ"
    bSendBuffer = StrConv(sPostData, vbFromUnicode)
    
    With xmlhttp
       .Open "POST", sUrl, False
       .setRequestHeader "Content-Type", "application/json; charset=utf-8"
       .send bSendBuffer
    End With
  3. Verwende die richtige Content-Type:

    • Achte darauf, dass der Content-Type auf application/json; charset=utf-8 gesetzt ist, um die Umlaute korrekt zu übertragen.
  4. Sende die Anfrage:

    • Ersetze sUrl mit der URL der API, zu der du die Daten senden möchtest.

Häufige Fehler und Lösungen

  • Problem: Umlaute werden nicht richtig dargestellt.

    • Lösung: Stelle sicher, dass du die StrConv-Funktion korrekt verwendest, um die String-Daten in ein Bytearray zu konvertieren.
  • Problem: API antwortet mit Fehler.

    • Lösung: Überprüfe die URL und den Content-Type. Stelle sicher, dass die API die erwarteten Parameter erhält.
  • Problem: Daten werden ohne Umlaute empfangen.

    • Lösung: Nutze eine eigene Funktion zur Konvertierung von Unicode zu UTF-8, wie sie unter diesem Link beschrieben wird.

Alternative Methoden

Eine alternative Methode zur Handhabung der Encoding-Probleme ist die Verwendung von MSXML2.ServerXMLHTTP. Diese Variante kann Vorteile bei der Verwendung von Proxys und beim Handling von Server-Antworten bieten.

Dim xmlhttp As New MSXML2.ServerXMLHTTP60

Verwende diesen Code, wenn du auch serverseitige Anfragen oder die Verarbeitung von großen Datenmengen planst.


Praktische Beispiele

Hier ein Beispiel für das Senden einer JSON-Anfrage an eine fiktive API:

Sub SendData()
    Dim xmlhttp As New MSXML2.XMLHTTP30
    Dim sPostData As String
    Dim bSendBuffer() As Byte

    sPostData = "{""name"":""Müller"",""alter"":30}"
    bSendBuffer = StrConv(sPostData, vbFromUnicode)

    With xmlhttp
        .Open "POST", "https://api.example.com/update", False
        .setRequestHeader "Content-Type", "application/json; charset=utf-8"
        .send bSendBuffer
    End With
End Sub

Hierbei wird ein JSON-Objekt mit Umlaute korrekt an die API gesendet.


Tipps für Profis

  • Nutze die vba.setrequestheader-Methode, um sicherzustellen, dass der Content-Type immer korrekt gesetzt ist.
  • Du kannst die MSXML2.XMLHTTP60-Bibliothek verwenden, wenn du mit Excel 2016 oder neuer arbeitest, um Zugang zu erweiterten Funktionen zu erhalten.
  • Teste deine API-Anfragen mit Tools wie Postman, um sicherzustellen, dass die Daten richtig formatiert sind, bevor du sie über VBA sendest.

FAQ: Häufige Fragen

1. Warum funktionieren Umlaute nicht richtig in meinem JSON?
Es liegt oft an der falschen Encoding-Einstellung. Stelle sicher, dass du charset=utf-8 in deinem Content-Type verwendest.

2. Was ist der Unterschied zwischen MSXML2.XMLHTTP und MSXML2.ServerXMLHTTP?
MSXML2.XMLHTTP ist ideal für Client-Anwendungen, während MSXML2.ServerXMLHTTP besser für serverseitige Anwendungen geeignet ist, da es mehr Kontrolle über Verbindungen bietet.

3. Wie kann ich sicherstellen, dass meine JSON-Daten korrekt übermittelt werden?
Verwende die StrConv-Funktion, um die Daten in ein Bytearray zu konvertieren, und überprüfe den Content-Type, um sicherzustellen, dass die API die Daten richtig interpretieren kann.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige