Hallo Leute
Ich hoffe ihr könnt mir ein paar Tipps oder Ansätze geben wie ich das Problem lösen kann.
Ich habe ein VB Makro geschrieben, welches mir die Einträge aus einer Excel Datei in einem speziellen Format in einer Textdatei speichert. Zielkodierung dieser Datei soll UCS-2 sein.
Als ersten Schritt hab ich mal die Ausgegebenen Strings in UTF-8 gewandelt, was auch soweit gut funktioniert. Dazu hab ich aus dem Netz folgenden Code verwendet:
Bisher hab ich mich noch nicht so intensiv mit Codierungen beschäftigen müssen, daher hab ich dahingehend noch nicht ganz so viele Kenntnisse.Code: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
Die Outputfunktion im VB sehen wie folgt aus:
Code:Open strDateiname For Output As #1Sicherlich noch verbesserungswürdig, aber vorerst einmal ausreichend.Code:Print #1, GetUTF8String(strTemp)
Bekomme ich mit durch Umschreiben der Funktion GetUTF8String denn auch einen UCS-2 String raus oder muss ich auch noch die Schreibfunktionen ändern?
Was ich bisher weiß:
UCS-2 ist der Vorgänger von UTF-16 und nutzt eine variable Bytelänge für die Zeichen die maximal 2 Byte lang ist. Stimmt das soweit oder hab ich da auch noch defizite?







Lesezeichen