Encoding in UTF-8 erzwingen Verfasst am: 13.11.2009, 10:21
Guten Tag,
ich habe ein VB Script um Einträge in einem EXCEL-Arbeitsblatt in eine *.txt Datei zu schreiben.
Die Web-Anwendung die mit diesen Dateien arbeiten soll erwartet UTF-8 VB speichert die Dateien aber im Windows/ANSI Format.
Gibt es eine Möglichkeit VB die geforderte Codierung beim schreiben der Datei mitzugeben???
Hier mal der Code:
Code:
Option Explicit
'Path & names
Const gPath As String = "\TSV\"
Const gFSC As String = "QuartzFongJob.tsv"
'Column numbers
Const gS1_VERCol As Integer = 1
Const gS1_MNCol As Integer = 2
Const gS1_STATUSCol As Integer = 3
Const gS1_NOTECol As Integer = 4
Const gS1_CRONEXCol As Integer = 5
Const gS1_JUNCol As Integer = 6
Const gS1_SCNCol As Integer = 7
Const gs1_SDate As Integer = 8
Const gs1_EDate As Integer = 9
Public Function getCurrentVersion() As String
Dim a As Range
Dim ver As Single
Dim tmp As Single
Dim c As Object
Dim s As String
Set a = Sheets(1).UsedRange.Columns(gS1_VERCol)
ver = 0
For Each c In a.Cells
s = Replace(c, ".", ",")
If IsNumeric(s) Then
tmp = CSng(s)
If tmp > ver Then ver = tmp
End If
Next c
getCurrentVersion = Replace(CStr(ver), ",", ".")
End Function
Private Sub CommandButton1_Click()
'vars
Dim fs As Object
Dim outfile As Object
Dim cv As String
Dim line As String
Dim lastKey As String
Dim i As Long
Dim btnCaption As String
btnCaption = CommandButton1.Caption
CommandButton1.Caption = "working..."
'find current version
cv = getCurrentVersion()
'get access to file system
Set fs = CreateObject("Scripting.FileSystemObject")
If Not fs.FolderExists(ThisWorkbook.Path & gPath) Then
fs.CreateFolder (ThisWorkbook.Path & gPath)
End If
For i = 1 To Sheets(1).UsedRange.Rows.Count
If Sheets(1).UsedRange.Cells(i, gS1_VERCol) = cv Then
line = Sheets(1).UsedRange.Cells(i, gS1_MNCol) & vbTab
line = line & Sheets(1).UsedRange.Cells(i, gS1_STATUSCol) & vbTab
line = line & Sheets(1).UsedRange.Cells(i, gS1_NOTECol) & vbTab
line = line & Sheets(1).UsedRange.Cells(i, gS1_CRONEXCol) & vbTab
line = line & Sheets(1).UsedRange.Cells(i, gS1_JUNCol) & vbTab
line = line & Sheets(1).UsedRange.Cells(i, gS1_SCNCol) & vbTab
line = line & Sheets(1).UsedRange.Cells(i, gs1_SDate) & vbTab
line = line & Sheets(1).UsedRange.Cells(i, gs1_EDate)
End If
Next i
outfile.Close
ich habs so gelöst: die *.txt ( in meinem Fall *.xml) erstellen,
und dann die datei zeile um zeile und buchstabe für buchstabe einlesen
und per Select Case dann umwandeln.
Gibts aber bestimmt andere "schönere Lösungen".
Am Dateibeginn sollte auch noch was bestimmtes stehen
3 Zeichen oder so damit es als UTF-8 erkannt wird.
Genaueres kann ich dir erst am Montag schreiben, weil ich mom. nicht in der Areit bin.
jaaaaaaa, auch die IT hab mal wochnende
lg
JAP Newbie
Anmeldedatum: 13.11.2009 Beiträge: 2
Verfasst am: 16.11.2009, 14:27
Hallo zusammen,
ich habe eine Möglichkeit gefunden das Problem mittels JAVA zu umgehen.
Ich lese die Dateien jetzt mit einem FileInputReader ein, dem kann man das Encoding mitgeben.
Hab mir da mal eine function gebastelt die eine Datei in beliebige "Formate" umwandelt
Folgenden Code einfach in Modul geben, und im Programm mit "Call FileToUTF8 (Pfad und Name der Datei, Charset_aus_Liste) aufrufen
Public Function FileToUTF8(sFilename As String, CharFormat As String)
Dim F As Integer
Dim sInhalt As String
Dim objStream As Object
If Dir$(sFilename, vbNormal) <> "" Then ' Existiert die Datei ?
F = FreeFile
Open sFilename For Binary As #F ' Textdatei im Binärmodus öffnen
sInhalt = Space$(LOF(F))
Get #F, , sInhalt ' Inhalt in einem Rutsch auslesen
Close #F ' Textdatei schließen
End If
If Dir$(sFilename & "-Orig", vbNormal) <> "" Then ' Existiert die Datei ?
Kill sFilename & "-Orig" ' Textdatei schließen
End If
Name sFilename As sFilename & "-Orig" 'Original Datei umbennen
Set objStream = CreateObject("ADODB.Stream") 'Stream erzeugen
With objStream
.Open 'Öffen
.Position = 0 'Cursor setzen
.Charset = CharFormat 'Charset angeben
.WriteText sInhalt 'Zeichen in Stream schreiben
.SaveToFile sFilename 'Stream in Datei schreiben
End With