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

Forumthread: UTF-8-Code in ASCII umwandeln

UTF-8-Code in ASCII umwandeln
22.06.2016 16:49:58
Werner
Hallo Forum,
ich habe zu einem älteren Beitrag (1498246) noch eine Frage. finde aber keine Möglichkeit, auf diesen Betrag zu antworten; liegt vermutlich am Alter des Beitrags.
In dem Beitrag wurde mir von Planlos ein lauffähiges Beispiel bereitgestellt.
Auch habe ich keine Möglichkeit gefunden, Planlos eine "private Message" zu schicken.
Das Beispiel läuft aber nicht ganz fehlerfrei.
Noch habe ich nicht herausgefunden, wo der Fehler in meiner auf dem Beispiel aufbauenden Anwendung steckt; es hat aber etwas mit den deutschen Umlauten zu tun.
Ich habe in dem Beispiel von Planlos noch eingebaut, dass mir das Ergebnis von MultiByteToWide in Hex ausgedruckt wird. Dabei habe ich festgestellt, dass bei jedem Aufruf zusätzlich 2 Bytes mit dem Inhalt 00 zurückgegeben werden. Es muss also in der Routine MultiByteToWide ein Fehler enthalten sein; mit meinem "bescheidenen" VBA-Wissen ist es mir jedoch nicht möglich, diesen zu erkennen.
Folgende Daten werden mir zurückgegeben:
48 61 6E 73 61 73 74 72 2E 20 31 39 0A 38 30 36 38 36 20 4D FC 6E 63 68 65 6E 00 00
Mein Aufruf: Debug.Print Text2Hex(MultiByteToWide((b())))
Meine Funktion:
Public Function Text2Hex(ByVal TextString As String) As String
Dim TempString   As String
Dim HexString As String
Dim LoopCount As Long
For LoopCount = 1 To Len(TextString)
TempString = Hex$(Asc(Mid$(TextString, LoopCount, 1)))
If Len(TempString) = 1 Then TempString = "0" & TempString
HexString = HexString & Space$(1) & TempString
Next LoopCount
Text2Hex = HexString
End Function
Grüße aus dem Schwabenland
Werner

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: UTF-8-Code in ASCII umwandeln
22.06.2016 19:34:05
Planlos
Hallo
ersetz die Fkt. mit nachfolgender:
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()), 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 = Left(aWide(), l - 1)
End If
End Function

Anzeige
AW: UTF-8-Code in ASCII umwandeln
22.06.2016 20:57:36
Werner
Hallo Planlos,
danke für die berichtigte Version. Das von mir gemeldete Problem ist dadurch behoben. Vielen Dank.
Gruss
Werner
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

UTF-8-Code in ASCII umwandeln


Schritt-für-Schritt-Anleitung

Um UTF-8-Code in ASCII umzuwandeln, kannst Du in Excel eine VBA-Funktion verwenden. Folgende Schritte sind nötig:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Klicke auf Einfügen > Modul.

  3. Kopiere die folgende Funktion in das Modul:

    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()), 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 = Left(aWide(), l - 1)
       End If
    End Function
  4. Kopiere die folgende Hilfsfunktion zum Umwandeln in Hex:

    Public Function Text2Hex(ByVal TextString As String) As String
       Dim TempString As String
       Dim HexString As String
       Dim LoopCount As Long
       For LoopCount = 1 To Len(TextString)
           TempString = Hex$(Asc(Mid$(TextString, LoopCount, 1)))
           If Len(TempString) = 1 Then TempString = "0" & TempString
           HexString = HexString & Space$(1) & TempString
       Next LoopCount
       Text2Hex = HexString
    End Function
  5. Verwende die Funktionen in einer Zelle, um z.B. deine UTF-8-Zeichenfolgen in ASCII umzuwandeln.


Häufige Fehler und Lösungen

  • Fehlerhafte Ausgaben bei Umlauten: Achte darauf, dass Deine Eingabezeichenfolgen korrekt kodiert sind. Verwende die MultiByteToWide-Funktion, um sicherzustellen, dass Umlaute korrekt behandelt werden.

  • Zusätzliche Bytes: Wenn Du zusätzliche 00 Bytes erhältst, kann das an einer falschen Eingabe oder einer nicht beendeten Zeichenfolge liegen. Stelle sicher, dass alle Zeichenfolgen korrekt abgeschlossen sind.


Alternative Methoden

  1. Excel-Funktionen: Du kannst auch Excel-Funktionen wie =DEC2HEX(ASC(A1)) verwenden, um ASCII-Werte direkt in Hex umzuwandeln.
  2. Online-Tools: Es gibt zahlreiche Online-Tools, um utf-8 to ascii Konvertierungen durchzuführen, falls Du keine VBA-Lösung verwenden möchtest.

Praktische Beispiele

  • Beispiel für die Umwandlung: Angenommen, Du hast den Text „Hänsel“ in Zelle A1 und möchtest den ASCII-Wert in Zelle B1:

    =Text2Hex(MultiByteToWide(A1))
  • CSV-Dateien konvertieren: Um eine asc datei in csv umwandeln, kannst Du die Textfunktionen in Excel nutzen, um die Daten zu bereinigen und in das gewünschte Format zu bringen.


Tipps für Profis

  • Verwende VBA zur Automatisierung von wiederkehrenden Aufgaben. Du kannst Skripte schreiben, die ganze Ordner mit Dateien durchlaufen und diese konvertieren.
  • Nutze Debug.Print in VBA, um zu überprüfen, welche Werte während der Ausführung Deiner Funktionen zurückgegeben werden.

FAQ: Häufige Fragen

1. Wie kann ich mehrere Zeichen in ASCII umwandeln?
Du kannst eine Schleife in VBA verwenden, um durch eine Liste von Zeichen zu iterieren und die Asc-Funktion anzuwenden.

2. Gibt es eine Möglichkeit, CSV-Dateien direkt in ASCII umzuwandeln?
Ja, Du kannst die Funktion Text2Hex zusammen mit Excel-Funktionen verwenden, um die Werte in Deiner CSV-Datei zu konvertieren. Lade die CSV-Datei in Excel und wende die Funktionen auf die entsprechenden Zellen an.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige