Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
812to816
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
812to816
812to816
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

UTF-8

UTF-8
20.10.2006 09:38:26
Markus
Hallo,
Ich muß aus einem Macro heraus eine Textdatei erstellen,die UTF-8 codiert ist.
Kann mir jemand sagen wie man das machen kann?
Mein Macro schreibt mit Print #2, "Text" in eine zuvor mit OPEN Dateiname for Output As #2 angelegt.
Vielen Dank und schönes WE
Markus

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

Betreff
Datum
Anwender
Anzeige
AW: UTF-8
20.10.2006 10:07:50
Oberschlumpf
Hi Markus
Im Internet gibt es viele Beiträge zum Thema UTF-8.
Angeblich soll auch Excel damit keine Probleme haben. Aber so genau steige ich da auch noch nicht durch.
Meine Idee ist:
Wenn du die UTF-8 Datei mit For Output in eine neue Datei schreibst, dann prüfe doch vorm Schreiben mit Print #2 die eingelesene Zeile auf falsche Zeichen und ersetze sie mit den richtigen Zeichen.
Ich vermute, es geht um die richtige Darstellung "unserer Sonderzeichen", wie Umlaute, ß usw, oder?
Wenn dem so ist, dann liste doch mal bitte alle nicht richtig dargestellten Sonderzeichen mit den dargestellten "falschen" Zeichen oder Zeichenpaaren auf.
In etwa so (es sind NUR Bsp, da ich nicht weiß, wie z Bsp Ä in UTF-8 dargestellt wird):
Ä = {·
ö = ¨
usw
Wenn ich dann also weiß, wie die Sonderzeichen falsch dargestellt werden, dann kann ich dir vllt so ein Makro basteln.
Konnte ich helfen?
Ciao
Thorsten
Anzeige
AW: UTF-8
20.10.2006 11:08:18
bst
Auch Hallo,
mit der UTF-Routine von hier: http://www.vovisoft.com/unicode/UniFunctions.htm
cu, Bernd
--
Option Explicit

Sub SaveUTF8File()
    Dim fname As Variant
    fname = Application.GetSaveAsFilename("UTF8.csv", "CSV-Dateien,*.csv,Alle Dateien,*.*")
    If fname <> False Then SaveAsUTF8CSV (fname)
End Sub

Sub SaveAsUTF8CSV(fname As String)
    Dim hfile As Integer ' Filehandle bzw. Dateinummer
    Dim i As Long ' Zähler über alle Zeilen
    Dim j As Integer ' Zähler über alle Spalten
    Dim OneLine As String ' Eine Zeile als String
    Dim maxcol As Integer ' max. Anzahl an Spalten
    
    hfile = FreeFile
    maxcol = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Column
    
    Open fname For Output As #hfile
    Print #hfile, Chr(&HEF); Chr(&HBB); Chr(&HBF);
    For i = 1 To ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
        OneLine = ""
        For j = 1 To maxcol - 1
            OneLine = OneLine & Cells(i, j).Text & ";"
        Next j
        OneLine = OneLine & Cells(i, j).Text & vbCrLf
        Print #hfile, GetUTF8String(OneLine);
    Next i
    Close #hfile
End Sub
'
' frei nach http://www.vovisoft.com/unicode/UniFunctions.htm#ToUTF8
'
Private Function GetUTF8String(s As String) As String
    Dim i As Integer ' Zähler über die einzelnen Zeichen des utf16-Strings
    Dim utf16 As Long, uc(2) As Byte
    
    GetUTF8String = ""
    For i = 1 To Len(s)
        utf16 = AscW(Mid(s, i, 1))
        If utf16 < 0 Then utf16 = utf16 + 65536
        If utf16 < &H80 Then ' 1 Byte
            GetUTF8String = GetUTF8String & Chr(utf16)
        ElseIf utf16 < &H800 Then ' 2 Byte
            uc(1) = &H80 + (utf16 And &H3F) ' Least Significant 6 bits
            utf16 = utf16 \ &H40 ' Shift UTF16 number right 6 bits
            uc(0) = &HC0 + (utf16 And &H1F) ' Use 5 remaining bits
            GetUTF8String = GetUTF8String & Chr(uc(0)) & Chr(uc(1))
        Else ' 3 Byte
            uc(2) = &H80 + (utf16 And &H3F) ' Least Significant 6 bits
            utf16 = utf16 \ &H40 ' Shift UTF16 number right 6 bits
            uc(1) = &H80 + (utf16 And &H3F) ' Use next 6 bits
            utf16 = utf16 \ &H40 ' Shift UTF16 number right 6 bits again
            uc(0) = &HE0 + (utf16 And &HF) ' Use 4 remaining bits
            GetUTF8String = GetUTF8String & Chr(uc(0)) & Chr(uc(1)) & Chr(uc(2))
        End If
    Next
End Function



Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige