Как кодировать файл в UCS2-Little Endian в Windows-1251?

Я пытаюсь изменить кодировку с существующего файла в UCS2-Little Endian на Windows-1251 из Visual Basic.

Я использую следующий код:

Sub convertFile()
t = AlterCharset("utf-16LE", "windows-1251")

iFileNum = FreeFile
Open sFullPath For Output As #iFileNum
Print #iFileNum, t

Close #iFileNum

End Sub

Private Function AlterCharset(FromChaset, ToCharset)
 Dim Bytes
 Bytes = StringToBytes(FromChaset)
 AlterCharset = BytesToString(Bytes, ToCharset)
End Function

Function StringToBytes(Charset)
 Dim Stream: Set Stream = CreateObject("ADODB.Stream")
 Stream.Type = adTypeText
 Stream.Charset = Charset
 Stream.Open
 Stream.LoadFromFile sFullPath
 Stream.flush
 Stream.Position = 0
 Stream.Type = adTypeBinary
 StringToBytes = Stream.Read
 Stream.Close
 Set Stream = Nothing
End Function

Private Function BytesToString(Bytes, Charset)

 Dim Stream: Set Stream = CreateObject("ADODB.Stream")
 Stream.Charset = Charset
 Stream.Type = adTypeBinary
 Stream.Open
 Stream.Write Bytes
 Stream.flush
 Stream.Position = 0
 Stream.Type = adTypeText
 BytesToString = Stream.ReadText
 Stream.Close
 Set Stream = Nothing

Конечная функция

Проблема в том, что я всегда получаю несколько байтов в начале текста и не могу открыть его в блокноте ++

Может ли кто-нибудь взглянуть и увидеть, что может быть не так в моем коде?

1 ответ

Вы можете сделать это, чтобы прочитать UCS2-Little Endian:

Dim fso     : Set fso = CreateObject("Scripting.FileSystemObject")
txt = fso.OpenTextFile("txtfile.txt", 1, False, -1).ReadAll

Раз в памяти вы можете записать в другой файл

Другие вопросы по тегам