Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Konvertierung UTF-8 zu ANSI

Konvertierung UTF-8 zu ANSI
15.01.2020 14:11:58
KaEmGe
Hallo,
ich habe schon ein wenig gegoogelt, krieg es aber nicht hin, die vorhandenen Beispiele für mich umzuschreiben.
Folgendes Problem:
Ich lese aus einer Textdatei (ca.20mb) im UTF-8 Format einzelne Textzeilen aus, die Umlaute werden mir im VBA nicht ordentlich im ANSI Format anzeigt. Die Datei selbst darf nicht umcodiert werden, höchstens als Kopie gespeichert werden. Ich möchte nicht z.b. auf Notepad++ zurückgreifen, um die Datei zu konvertieren.
Nun würde ich gern wissen, wie ihr dies rein mit VBA bewerkstelligen würdet - ich würde ungern die Zeile einlesen, um dann auf ein Replace-Array zurück zu greifen, da ich nicht weiss, ob in der Datei wirklich nur Umlaute vorhanden sind, sondern ggf. andere Zeichen.
Hat jemand eine Idee, wie hier vorzugehen ist?
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Konvertierung UTF-8 zu ANSI
15.01.2020 14:47:38
peterk
Hallo
Ein Beispiel
Option Explicit

Sub DatenBesorgen()
    Const adReadLine = -2 'Reads the next line from the stream 
    Const adReadAll = -1  'Reads all characters from the stream, from the current position to EOS 
    
    Dim DateiName As String
    Dim LineFromFile As String
    Dim LineItems As Variant
    Dim row_number As Long

    Dim objStream As Object

    DateiName = "C:\Users\ich\Documents\Herber\131526.txt"  'anpassen 

    Set objStream = CreateObject("ADODB.Stream")
    objStream.Charset = "utf-8"
    objStream.Open
    objStream.LoadFromFile (DateiName)

    row_number = 2

    Do Until objStream.EOS                                'Gesammtes TextDok durchgehen 
        LineFromFile = objStream.ReadText(adReadLine)     'Zeile aus Quelldatei einlesen 
        Worksheets("Tabelle1").Cells(row_number, 1).Value = LineFromFile
        row_number = row_number + 1
    Loop
    Set objStream = Nothing

End Sub

Anzeige
AW: Konvertierung UTF-8 zu ANSI
15.01.2020 14:53:18
KaEmGe
Hallo,
danke für die schnelle Rückmeldung.
Ich hatte jetzt so angefangen - um die Zeilen danach per Array auslesen zu können.
Ich wusste nicht, ob und wie hier ein "ReadLine" verwendet werden kann.
Deine Lösung gefällt mir um einiges besser.
Public Function ReadFileRows(path As String)
Static obj As Object, arrText
obj = VBA.CreateObject("ADODB.Stream")
obj.CharSet = "UTF-8")
obj.Open
obj.LoadFromFile path
ReadFile = obj.ReadText
arrText = Split(ReadFile, vbCrLf)
obj.Close

Anzeige
AW: Konvertierung UTF-8 zu ANSI
15.01.2020 20:42:33
Günther
Moin,
mit Power Query geht das sogar ganz ohne VBA und natürlich mit optischer Kontrolle.
Gruß
Günther
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Konvertierung von UTF-8 zu ANSI in Excel


Schritt-für-Schritt-Anleitung

Um eine UTF-8 Datei in ANSI zu konvertieren und dabei Umlaute korrekt zu behandeln, kannst Du folgenden VBA-Code verwenden:

Option Explicit

Sub DatenBesorgen()
    Const adReadLine = -2 'Reads the next line from the stream 
    Const adReadAll = -1  'Reads all characters from the stream, from the current position to EOS

    Dim DateiName As String
    Dim LineFromFile As String
    Dim row_number As Long
    Dim objStream As Object

    DateiName = "C:\Users\ich\Documents\Herber\131526.txt"  'anpassen 

    Set objStream = CreateObject("ADODB.Stream")
    objStream.Charset = "utf-8"
    objStream.Open
    objStream.LoadFromFile (DateiName)

    row_number = 2

    Do Until objStream.EOS 'Gesammtes TextDok durchgehen 
        LineFromFile = objStream.ReadText(adReadLine) 'Zeile aus Quelldatei einlesen 
        Worksheets("Tabelle1").Cells(row_number, 1).Value = LineFromFile
        row_number = row_number + 1
    Loop
    Set objStream = Nothing

End Sub

Dieser Code liest die Zeilen einer UTF-8 Datei ein und speichert sie in eine Excel-Tabelle. Die Umlaute sollten korrekt dargestellt werden, ohne dass eine Umcodierung der Datei notwendig ist.


Häufige Fehler und Lösungen

  1. Zeichen werden nicht korrekt angezeigt:

    • Stelle sicher, dass die richtige Zeichencodierung im Code angegeben ist (objStream.Charset = "utf-8").
  2. VBA gibt einen Fehler aus beim Laden der Datei:

    • Überprüfe den Dateipfad und stelle sicher, dass die Datei existiert und der Pfad korrekt ist.

Alternative Methoden

Eine weitere Möglichkeit, UTF-8 in ANSI umzuwandeln, ist die Verwendung von Power Query. Hier kannst Du die Datei direkt in Excel importieren und die Encoding-Optionen anpassen:

  1. Daten importieren:

    • Gehe zu Daten > Daten abrufen > Aus Datei > Aus Text/CSV.
  2. Encoding auswählen:

    • Im Importdialog kannst Du die Codierung auf UTF-8 setzen.
  3. Daten laden:

    • Lade die Daten in eine Tabelle, und Excel konvertiert sie automatisch in ANSI.

Praktische Beispiele

Wenn Du eine große Textdatei hast und nur bestimmte Zeilen extrahieren möchtest, kannst Du den vorherigen VBA-Code anpassen, um nur die benötigten Zeilen zu lesen.

Ein Beispiel könnte so aussehen:

If InStr(LineFromFile, "Suchbegriff") > 0 Then
    Worksheets("Tabelle1").Cells(row_number, 1).Value = LineFromFile
End If

Mit dieser Bedingung werden nur Zeilen mit dem Suchbegriff in die Excel-Tabelle eingefügt.


Tipps für Profis

  • Nutze die Text-to-Columns Funktion in Excel, um Daten besser zu formatieren, nachdem Du sie importiert hast.
  • Achte darauf, die Variablen in Deinem VBA-Code gut zu benennen, um die Lesbarkeit zu erhöhen.
  • Wenn Du regelmäßig mit verschiedenen Encodings arbeitest, kannst Du eine Funktion erstellen, die die Codierung als Parameter akzeptiert.

FAQ: Häufige Fragen

1. Wie kann ich UTF-8 in ANSI umwandeln ohne VBA? Du kannst Power Query verwenden, um die Datei zu importieren und die Encoding-Optionen zu ändern.

2. Was ist der Unterschied zwischen ANSI und UTF-8? ANSI verwendet eine begrenzte Zeichencodierung, während UTF-8 eine breitere Palette von Zeichen unterstützt, einschließlich aller Unicode-Zeichen.

3. Wie kann ich Umlaute in einer UTF-8 Datei korrekt anzeigen? Stelle sicher, dass Du die Datei mit der richtigen Codierung (UTF-8) öffnest. Im VBA-Code sollte objStream.Charset = "utf-8" gesetzt sein.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige