wie kann ich Textdateien (ca. 8000) am einfachsten von UTF-8 nach Ansi konvertieren?
Geht das evtl. per VBA ?
Vielen Dank im Voraus !
Liebe Grüße
Selma
Option Explicit
Private Declare Function WideCharToMultiByte Lib "kernel32.dll" ( _
ByVal CodePage As Long, _
ByVal dwFlags As Long, _
ByVal lpWideCharStr As Long, _
ByVal cchWideChar As Long, _
ByVal lpMultiByteStr As Long, _
ByVal cbMultiByte As Long, _
ByVal lpDefaultChar As Long, _
ByVal lpUsedDefaultChar As Long) As Long
Private Declare Function MultiByteToWideChar Lib "kernel32.dll" ( _
ByVal CodePage As Long, _
ByVal dwFlags As Long, _
ByVal lpMultiByteStr As Long, _
ByVal cbMultiByte As Long, _
ByVal lpWideCharStr As Long, _
ByVal cchWideChar As Long) As Long
Private Const CP_UTF8 As Long = 65001
Private Function ConvertToUTF8(ByRef Source As String) As Byte()
Dim Length As Long
Dim Pointer As Long
Dim Size As Long
Dim Buffer() As Byte
Length = Len(Source)
Pointer = StrPtr(Source)
Size = WideCharToMultiByte(CP_UTF8, 0, Pointer, Length, 0, 0, 0, 0)
ReDim Buffer(0 To Size - 1)
WideCharToMultiByte CP_UTF8, 0, Pointer, Length, VarPtr(Buffer(0)), _
Size, 0, 0
ConvertToUTF8 = Buffer
End Function
Private Function ConvertFromUTF8(ByRef Source() As Byte) As String
Dim Size As Long
Dim Pointer As Long
Dim Length As Long
Dim Buffer As String
Size = UBound(Source) - LBound(Source) + 1
Pointer = VarPtr(Source(LBound(Source)))
Length = MultiByteToWideChar(CP_UTF8, 0, Pointer, Size, 0, 0)
Buffer = Space$(Length)
MultiByteToWideChar CP_UTF8, 0, Pointer, Size, StrPtr(Buffer), Length
ConvertFromUTF8 = Buffer
End Function
Public Sub Test_der_Functions()
Dim Eingabe As String: Eingabe = "ändern möchte man es müssen"
Dim Ausgabe As Variant
Dim sText As String
Dim iIndx As Integer
Dim sTmp() As Byte
Ausgabe = ConvertToUTF8(Eingabe) ' den Text in UTF8 konvertieren
For iIndx = 0 To UBound(Ausgabe)
sText = sText & Ausgabe(iIndx) & Chr(9) & Chr(Ausgabe(iIndx)) & Chr(10)
ReDim Preserve sTmp(iIndx)
sTmp(iIndx) = Ausgabe(iIndx) ' den konvertierten Text in ein Array speichern
Next iIndx
MsgBox sText ' den konvertierten Text anzeigen
Eingabe = ConvertFromUTF8(sTmp) ' das Array wieder zurückkonvertieren
MsgBox Eingabe ' das zurückkonvertierte Array anzeigen
End Sub