Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1496to1500
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

UTF-8-Code in Asci umwandeln

UTF-8-Code in Asci umwandeln
10.06.2016 15:44:08
Werner
Hallo Forum,
ich versuche, in Excel eine externe File mit Hilfe von VBA zu verarbeiten. Teilweise enthält diese File jedoch UTF-8-Daten; z. B.:

=48=61=6E=73=61=73=74=72=2E=20=31=39=0A=38=30=36=38=36=20=4D=C3=BC=6E=63=68=65=6E


Übersetzt sollte dabei folgendes herauskommen:

Hansastr. 19 80686 München
Wobei zwischen der Hausnummer und der PLZ ein CRLF (X'0A') vorhanden ist.
Es ist kein Problem für mich, die UTF8-Zeichenkette zu erkennen. Mein Problem ist nur, wie mache ich daraus einen ASCII-Text. Ich habe auch erkannt, dass das "="-Zeichen zur Trennung der einzelnen UTF-8-Werte benutzt wird. Die würde ich vorher mit der Replace-Funktion löschen.
Weder im Forum noch im Internet habe ich ein brauchbares und verständliches Beispiel gefunden.
Für ein Beispiel wäre ich sehr dankbar.
Grüße aus dem Schwabenland
Werner

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: UTF-8-Code in Asci umwandeln
10.06.2016 16:04:53
Zwenn
Hallo Werner,
UTF-8 und ASCII sind in den erstn 127 Zeichen komplett identisch. Wenn Du Deine Hex-Werte nimmst und sie in Dezimal umrechnest, dann wirst Du sehen, dass dabei genau die Codes für Deine Buchstaben und Zahlen rauskommen, die Deine Adresse ergeben.
So ist Hexadezimal 48 = Dezimal 72. In einer ASCII Tabelle kannst Du nachsehen, dass das genau der Code für das große H ist (Dein erster kodierter Buchstabe). Die umgerechneten Codes kannst Du mit chr(Code) in VBA verarbeiten, um sie richtig darzustellen.
Viele Grüße,
Zwenn

AW: UTF-8-Code in Asci umwandeln
10.06.2016 16:35:10
Werner
Hallo Zwenn,
danke für die schnelle Antwort. Ich habe des gleich probiert, allerdings nicht mit vollem Erfolg.
Ich habe folgende Debug-Befehle probiert:
Debug.Print Chr(CDec("&H" & "4d"))
Debug.Print Chr(CDec("&H" & "C3"))
Der erste liefert das "M" von München, der zweite jedoch nicht das "ü", Aber der Hex-Wert C3 ist Dezimal 195 und damit mehr als 127. Und nun? Wie bekomme ich die deutschen Umlaute?
Gruß
Werner

Anzeige
AW: UTF-8-Code in Asci umwandeln
10.06.2016 16:48:38
Zwenn
Hallo Werner,
an das ü habe ich nicht gedacht. Das gehört natürlich nicht zum ASCII Zeichensatz. Versuche mal, deine Codes nicht mit Chr(Code) darzustellen, sondern mit ChrW(Code). ChrW mit dezimalem Code in der Klammer stellt Unicode-Zeichen dar. Außer Du arbeitest auf einem Macintosh. Da war MS wohl zu geizig, Unicode auf diese Weise zu unterstützen.
Viel Erfolg :-)
Zwenn

AW: UTF-8-Code in Asci umwandeln
10.06.2016 17:02:21
Werner
Hallo Zwenn,
Test leider ohne Erfolg. Nur zu Info: ich arbeite auf einem PC mit Windows 10.
Sowohl CHR(C3) als auch CHRW(C3) liefern als Ergebnis ein nicht druckbares Zeichen.
Gruß
Werner

Anzeige
AW: UTF-8-Code in Asci umwandeln
10.06.2016 17:05:33
Werner
Problem besteht weiterhin; habe das "Kontrollkästen" übersehen.

AW: UTF-8-Code in Asci umwandeln
10.06.2016 17:06:33
Zwenn
Ich nochmal.
Habe es jetzt selbst getestet und habe festgestellt, das der Code C3 nicht der UTF-8 Code für das ü ist. Der UTF-8 Code für ü lautet FC. Ich habe aber bisher nicht rausgefunden, welche Codierung bei Dir vorliegt.
Siehe hier:
http://javawiki.sowas.com/doku.php?id=java:unicode
Das Einzige, was ich auf die Schnelle gefunden habe ist ein Hinweis auf Stack Overflow, dass es sich bei C3 um eine ASCII Beschreibung für die UTF-8 Codierung handelt. Damit kann ich aber nix anfangen.
http://stackoverflow.com/questions/23009232/php-translating-c3bc-to-%C3%BC

Anzeige
Thema noch offen (k.T.)
10.06.2016 17:08:24
Zwenn
k.T.

AW: UTF-8-Code in Asci umwandeln
10.06.2016 17:16:41
Werner
Zum besseren Verständnis: bei den Daten, welche ich verarbeite, handelt es sich um VCARDs-Daten von meinem Handy. Und dort steht die Zeile so drin:
ADR;HOME;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:;=48=61=6E=73=61=73=74=72=2E=20=31=39=0A=38=30=36=38=36=20=4D=C3=BC=6E=63=68=65=6E;;;;
Allerdings ohne Zeilenumbruch.
Ich hoffe noch immer, dass mir jemand helfen kann.
Werner

AW: UTF-8-Code in Asci umwandeln
10.06.2016 23:41:50
Planlos
Hallo
UTF-8 ist multibyte, dat heist ein Zeichen kann 1 - 4 byte beanspruchen, in deinem Fall ist das ü durch die Bytes "=C3=BC" beschrieben.
Die Wandlung kann durch die Api "MultiByteToWideChar" oder durch ein ADODB.Stream erfolgen.
Hier mal api
Declare Function MultiByteToWideChar Lib "KERNEL32.DLL" _
( _
ByVal CodePage As Long, _
ByVal dwFlags As Long, _
ByVal lpMultiByteStr As Long, _
ByVal cchMultiByte As Long, _
ByVal lpWideCharStr As Long, _
ByVal cchWideChar As Long _
) As Long
Enum CPs
CP_ACP = 0              ' default to ANSI code page
CP_OEMCP = 1            ' default to OEM  code page
CP_MACCP = 2            ' default to MAC  code page
CP_THREAD_ACP = 3       ' current thread's ANSI code page
CP_SYMBOL = 42          ' SYMBOL translations
CP_UTF7 = 65000         ' UTF-7 translation
CP_UTF8 = 65001         ' UTF-8 translation
End Enum
Function MultiByteToWide(ByRef s As String, Optional ByVal cp As Long = 65001) As String
Dim l As Long
Dim b() As Byte
If Right(s, 1)  Chr(0) Then s = s + Chr(0)
b() = s
l = MultiByteToWideChar(cp, 0, VarPtr(b(0)), UBound(b()) + 1, 0, 0)
If l Then
ReDim aWide(1 To l * 2) As Byte
l = MultiByteToWideChar(cp, 0, VarPtr(b(0)), UBound(b()), VarPtr(aWide(1)), l * 2)
MultiByteToWide = aWide()
End If
End Function
Sub ZerlegMalDeinBsp
Dim sf() As String
Dim b() As Byte
Dim i As Long
sf() = Split(Mid("=48=61=6E=73=61=73=74=72=2E=20=31=39=0A=38=30=36=38=36=20=4D=C3=BC=6E=63= _
68=65=6E", 2), "=")
ReDim b(UBound(sf))
For i = 0 To UBound(sf())
b(i) = CByte("&H" & sf(i))
Next
Debug.Print MultiByteToWide((b()))
End Sub

Anzeige
AW: UTF-8-Code in Asci umwandeln
11.06.2016 09:10:56
Werner
Hallo Planlos,

recht herzlichen Dank für das Beispiel.
ich habe es gleich ausprobiert und muss neidlos gestehen: es funktioniert super.
Ich findes es gut, wenn als Antwort imnmer ein Beispiel bereitgestellt wird, und man so die (funktionierende) Lösung nachvollziehen kann, vor Allem dann, wenn man selbst nicht das große Wissen hat.
Danke. Danke. Danke.
Gruß
Werner

89 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige