使用 VBA 将 UTF-8 转换为 ANSI

问题描述 投票:0回答:1

我有一个 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 字符。

vba excel utf-8 ansi
1个回答
2
投票

VBA 中的

Open
函数仅适用于
ANSI
编码文件和二进制文件。如果您想读/写
utf-8
文件,您必须找到另一种方法。

utf-8
编码比
ANSI
具有更大的字符集,因此并不总是可以无损地从
utf-8
转换为
ANSI
。也就是说,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
© www.soinside.com 2019 - 2024. All rights reserved.