Last Updated on 2. Juni 2016 by Thomas J. Fehr
Soll ein Text, der als UTF-8 codiert wurde, in eine andere Zeichencodierung umgewandelt werden, kann dazu das ADO Stream-Objekt verwendet werden. Die hier verwendete Codierung „Windows-1252“ ist eine Untermenge des ISO-8859-1 Character Sets.
'/***
' @brief convert a utf-8 text to an Windows-1252 text
' @param utf8xml, value
' @return text with Windows-1252 character set
'***/
Function UTF8TOISO(byval utf8xml)
On Error Resume Next
Dim objStream
const adTypeText = 2
Set objStream = CreateObject( "ADODB.Stream" )
Set objStreamISO = CreateObject( "ADODB.Stream" )
objStream.Type = adTypeText
objStream.Charset = "utf-8"
objStream.Open
'write data to stream
objStream.WriteText utf8xml
objStream.Position = 0
objStreamISO.Type = adTypeText
objStreamISO.Charset = "Windows-1252"
objStreamISO.Open
objStreamISO.WriteText objStream.ReadText
objStream.Position = 0
If Err Then
UTF8TOISO = ""
Else
UTF8TOISO = objStreamISO.ReadText
End If
objStream.Close
objStreamISO.Close
Set objStream = Nothing
Set objStreamISO = Nothing
End Function
Die verwendeten Properties und Funktionen des Stream-Objekts sind:
- .Open Öffnet den Stream
- .Close Schliesst den Stream
- .Charset Legt fest, welche Zeichencodierung verwendet werden soll
- .Type Definiert ob es ein Binär- oder Textstream ist
- .WriteText Schreibt Textdaten in den Stream
- .ReadText Liest Textdaten vom Stream
- .Position Legt die Position im Stream fest (in Bytes)
Diese Funktion lässt sich auch leicht modifizieren, wenn der konvertierte Text in einer Datei gespeichert werden soll. Dazu muss nur die Funktion „.SaveToFile(filename, adSaveCreateOverWrite)“ des ADO Stream aufgerufen werden.
Text UTF-8 codiert in einer Datei speichern
Um einen Text UTF-8 codiert in einer Datei zu speichern kann folgender Code verwendet werden:
'/***
' @brief save a text UTF-8 coded in a file
' @param textToSave, value
' @param filename, the name of the file to create
' @return true on no error or false on error
'***/
Function saveFileAsUTF8(byval textToSave, byval filename)
On Error Resume Next
Dim objStream
const adTypeText = 2
Const adSaveCreateOverWrite = 2
Set objStream = CreateObject( "ADODB.Stream" )
objStream.Charset = "utf-8"
objStream.Mode = adModeReadWrite
objStream.Type = adTypeText
objStream.Open
'write data to stream and save to file
objStream.WriteText textToSave
objStream.Flush
objStream.Position = 0
objStream.SaveToFile filename, adSaveCreateOverWrite
If Err Then
ISOTOUTF8 = false
Else
ISOTOUTF8 = true
End If
objStream.Close
Set objStream = Nothing
End Function
'Aufruf der Funktion
call saveFileAsUTF8("Die bunte Welt besteht aus einem grünen Wald, einer hässlichen Geschichte und dem öffentlichen Grund...", "D:\tmp\ASP\utf8.txt")