使用VBA将UTF-8转换为ANSI

我有一个VBA Excel代码,它从Excel表格中获取日语数据,并将其与日文数据在文本文件中进行比较,并用英文单词replace日文单词。 但我应该能够在UTF-8文本文件上做到这一点。 这个代码用奇怪的字符replace所有的日文单词。 我如何保存没有任何问题?

Open sFileName For Input As iFileNum For n = 1 To lngLastCell Label5.Caption = n & "/" & lngLastCell searchtext = MySearch(n) valuetext = MyText(n) eplcCount = 0 spltCount = 0 searchpart = Array(searchtext) valuepart = Array(valuetext) Do Until EOF(iFileNum) Line Input #iFileNum, sBuf sTemp = sTemp & sBuf & vbCrLf Loop Close iFileNum sTemp = Replace(sTemp, searchtext, valuetext) 'iFileNum = FreeFile Open sFileName For Output As iFileNum Print #iFileNum, sTemp Next n 

代码适用于ANSI字符。

VBA的Open函数只能处理ANSI编码的文件和二进制文件。 如果你想读/写一个utf-8文件,你必须find另一种方式。

utf-8编码比ANSI有更大的字符集,因此无法将ANSI转换为utf-8而不会丢失。 也就是说,Excel和VBA中的String存储为utf-16 (VBA编辑器仍然使用ANSI ),所以你只需要从utf-8转换为utf-16

使用ADODB.Stream

 Public Function ReadFile(path As String, Optional CharSet As String = "utf-8") Static obj As Object If obj Is Nothing Then Set obj = VBA.CreateObject("ADODB.Stream") obj.CharSet = CharSet obj.Open obj.LoadFromFile path ReadFile = obj.ReadText() obj.Close End Function Public Sub WriteFile(path As String, text As String, Optional CharSet As String = "utf-8") Static obj As Object If obj Is Nothing Then Set stream = VBA.CreateObject("ADODB.Stream") obj.CharSet = CharSet obj.Open obj.WriteText text obj.SaveToFile path obj.Close End Sub