【问题标题】:Convert UTF-8 to ANSI using VBA使用 VBA 将 UTF-8 转换为 ANSI
【发布时间】:2017-07-25 11:27:36
【问题描述】:

我有一个 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】:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-19
      • 2019-02-10
      • 1970-01-01
      • 2015-10-06
      • 2013-12-14
      • 2012-01-08
      • 2015-11-22
      • 2013-02-11
      相关资源
      最近更新 更多