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

Forumthread: CSV-Datei in UTF 8 ohne BOM

CSV-Datei in UTF 8 ohne BOM
Thomas
Hallo,
ich habe mal eine wahrscheinlich etwas abgedrehte Frage.
Ich erzeuge mit einem Excel-Makro eine CSV-Datei, wandele diese mit VBA in eine CSV-Datei mit UTF-8 Codierung um. Wenn ich nun überprüfe, ob die Datei ein BOM hat, bekomme ich nein.
Code zur Erzeugen einer csv-Datei mit UTF-Codierung. In strText sind alle Zeilen der Excel-Tabelle enthalten. 65001 entspricht UTF8. strDateinamen enthält den Namen der CSV-Datei.
'Umwandlung Text mit Hilfe WideCharTiMultiByte
Sub Test
lngLength = Len(strText)
lngPointer = StrPtr(strText)
lngSize = WideCharToMultiByte(65001, 0&, lngPointer, lngLength, 0&, 0&, 0&, 0&)
ReDim bytBuffer(0 To lngSize - 1)
Call WideCharToMultiByte(65001, 0&, lngPointer, lngLength, VarPtr(bytBuffer(0)), lngSize, 0&, 0& _
)
'String in nächste freie Textdatei schreiben
intFileNumber = FreeFile
Open strDateinamen For Binary Access Write As #intFileNumber
Put #intFileNumber, , bytBuffer
Close #intFileNumber
End sub
Routine zum prüfen, ob ein BOM vorhanden ist.

Sub BOM_Prüfen()
Dim fso As New FileSystemObject
Dim strTest As String
strTest = fso.OpenTextFile(F, ForReading).ReadAll
If Left(strTest, 3) = "" Then
MsgBox "8"
ElseIf Left(strTest, 2) = "þÿ" Or Left(strTest, 2) = "ÿþ" Then
MsgBox "16"
Else
MsgBox "ohne BOM"
End If
End Sub
Wenn mein Kollege die Datei mit ultraedit öffnet, wird UTF16 als Codierung und ein anderes BOM angezeigt.
Falls einer von Euch eine Idee hat: vielen Dank.
Viele Grüße
Thomas
Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: CSV-Datei in UTF 8 ohne BOM
02.04.2012 10:10:32
bst
Morgen Thomas,
versuche das mal so.
cu, Bernd
--
Option Explicit

Declare Function WideCharToMultiByte Lib "kernel32" ( _
    ByVal codepage As Long, _
    ByVal dwFlags As Long, _
    ByVal lpWideCharStr As Long, _
    ByVal cchWideChar As Long, _
    ByVal lpMultiByteStr As Long, _
    ByVal cchMultiByte As Long, _
    ByVal lpDefaultChar As Long, _
    ByVal lpUsedDefaultChar As Long) As Long

Public Sub WriteUTF8File(ByVal strFileName As String, ByVal strText As String)
    Dim lngLength As Long
    Dim lngPointer As Long
    Dim lngSize As Long
    Dim intFileNumber As Integer
    
    lngLength = Len(strText)
    lngPointer = StrPtr(strText)
    lngSize = WideCharToMultiByte(65001, 0&, lngPointer, lngLength, 0&, 0&, 0&, 0&)
    ' lngSize Bytes werden für den String strText benötigt, 3 Bytes mehr für die BOM
    Redim bytBuffer(0 To lngSize + 2) As Byte
    bytBuffer(0) = &HEF
    bytBuffer(1) = &HBB
    bytBuffer(2) = &HBF
    Call WideCharToMultiByte(65001, 0&, lngPointer, lngLength, VarPtr(bytBuffer(3)), lngSize, 0&, 0&)
    
    intFileNumber = FreeFile
    Open strFileName For Binary Access Write As #intFileNumber
    Put #intFileNumber, , bytBuffer
    Close #intFileNumber
End Sub

Sub TestIt()
    WriteUTF8File "e:\test\utf-8.txt", Replace(Range("A1").Value, vbLf, vbNewLine)
End Sub



Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

CSV-Datei in UTF 8 ohne BOM


Schritt-für-Schritt-Anleitung

Um eine CSV-Datei in UTF-8 ohne BOM zu erstellen, kannst du die folgenden Schritte ausführen. Dies ist besonders nützlich, wenn du sicherstellen möchtest, dass die Datei in verschiedenen Anwendungen korrekt geöffnet wird.

  1. VBA-Umgebung öffnen: Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.
  2. Neues Modul hinzufügen: Klicke auf Einfügen und wähle Modul, um einen neuen Code-Bereich zu erstellen.
  3. Code einfügen: Füge den folgenden Code ein, um eine CSV-Datei im UTF-8 Format zu erstellen:
Sub WriteUTF8File(ByVal strFileName As String, ByVal strText As String)
    Dim lngLength As Long
    Dim lngPointer As Long
    Dim lngSize As Long
    Dim intFileNumber As Integer

    lngLength = Len(strText)
    lngPointer = StrPtr(strText)
    lngSize = WideCharToMultiByte(65001, 0&, lngPointer, lngLength, 0&, 0&, 0&, 0&)

    ReDim bytBuffer(0 To lngSize - 1)
    Call WideCharToMultiByte(65001, 0&, lngPointer, lngLength, VarPtr(bytBuffer(0)), lngSize, 0&, 0&)

    intFileNumber = FreeFile
    Open strFileName For Binary Access Write As #intFileNumber
    Put #intFileNumber, , bytBuffer
    Close #intFileNumber
End Sub
  1. Testfunktion hinzufügen: Füge eine Funktion hinzu, um die oben definierte Subroutine zu testen:
Sub TestIt()
    WriteUTF8File "C:\dein\pfad\datei.csv", "Dein,Inhalt,Hier"
End Sub
  1. Code ausführen: Schließe den VBA-Editor und führe die TestIt Subroutine aus, um die CSV-Datei zu erstellen.

Häufige Fehler und Lösungen

  • Fehler beim Öffnen der CSV-Datei: Wenn die Datei nicht im richtigen Format geöffnet wird, kann es sein, dass die Codierung nicht korrekt ist. Überprüfe den Code auf mögliche Fehler und stelle sicher, dass du die richtige Codierung (UTF-8) verwendest.

  • BOM ist vorhanden: Wenn ein BOM in der Datei vorhanden ist, stelle sicher, dass du die Bytes für das BOM nicht beim Schreiben der Datei hinzufügst. Der obige Code entfernt das BOM.


Alternative Methoden

Falls du keine VBA-Programmierung verwenden möchtest, kannst du auch einen Texteditor wie Notepad++ verwenden, um die CSV-Datei zu speichern:

  1. Öffne die CSV-Datei in Notepad++.
  2. Wähle Encoding aus der Menüleiste.
  3. Wähle UTF-8 (ohne BOM) und speichere die Datei.

Diese Methode ist einfach und erfordert keine Programmierung in Excel.


Praktische Beispiele

Eine häufige Anwendung ist das Exportieren von Daten aus Excel in eine CSV-Datei. Hier ist ein Beispiel, wie du eine Tabelle in eine CSV-Datei umwandeln kannst:

Sub ExportToCSV()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Tabelle1") ' Ändere den Tabellennamen entsprechend

    Dim rng As Range
    Set rng = ws.UsedRange

    Dim strText As String
    Dim cell As Range

    For Each cell In rng
        strText = strText & cell.Value & ","
        If cell.Column = rng.Columns.Count Then strText = Left(strText, Len(strText) - 1) & vbCrLf
    Next cell

    WriteUTF8File "C:\dein\pfad\export.csv", strText
End Sub

Tipps für Profis

  • CSV in UTF-8 umwandeln: Wenn du eine bestehende CSV-Datei hast, die nicht im UTF-8 Format ist, kannst du sie mit dem obigen VBA-Code umwandeln.
  • Verwendung von FileSystemObject: Überlege, die FileSystemObject-Klasse zu verwenden, um Dateien zu lesen und zu schreiben, was mehr Flexibilität bieten kann.

FAQ: Häufige Fragen

1. Wie öffne ich eine UTF-8 CSV-Datei in Excel? Um eine UTF-8 CSV-Datei in Excel zu öffnen, gehe zu Daten > Aus Text/CSV. Wähle die Datei aus und stelle sicher, dass die Codierung auf UTF-8 eingestellt ist.

2. Was ist ein BOM und warum sollte ich ihn entfernen? Ein BOM (Byte Order Mark) ist ein Zeichen, das am Anfang einer Datei hinzugefügt wird, um die Codierung anzugeben. Manche Programme haben Probleme beim Verarbeiten von Dateien mit einem BOM, weshalb es oft empfohlen wird, diesen zu entfernen.

3. Wie kann ich überprüfen, ob meine CSV-Datei UTF-8 ist? Du kannst die Datei in einem Texteditor öffnen, der die Codierung anzeigt, oder ein Skript verwenden, um die ersten Bytes der Datei zu prüfen.

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