使用VBA将UTF-8转换为ANSI

时间:2017-07-25 11:27:36

标签: excel vba excel-vba utf-8 ansi

我有一个VBA Excel代码,它从excel表中获取日语数据,将其与文本文件中的日语数据进行比较,并将日语单词替换为英语单词。但我应该能够在UTF-8文本文件上执行此操作。此代码用奇怪的字符替换所有日语单词。如何在没有任何问题的情况下保存?

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字符。

1 个答案:

答案 0 :(得分:2)

VBA中的Open函数仅适用于ANSI编码文件和二进制文件。如果您希望读/写utf-8文件,则必须找到另一种方式。

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 obj = VBA.CreateObject("ADODB.Stream")
  obj.CharSet = CharSet
  obj.Open
  obj.WriteText text
  obj.SaveToFile path
  obj.Close
End Sub