Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1256to1260
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

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

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

307 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige