代码之家  ›  专栏  ›  技术社区  ›  PHP Enthu

使用VBA将UTF-8转换为ANSI

  •  3
  • PHP Enthu  · 技术社区  · 7 年前

    我有一个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 回复  |  直到 7 年前
        1
  •  2
  •   Shafeek Florent B.    6 年前

    这个 Open VBA的功能工作于 ANSI 仅编码文件和二进制文件。如果您希望读/写 utf-8 文件,你必须找到另一种方法。

    这个 编码的字符集比 ,因此不可能从 ANSI标准 utf-8 String utf-16 ANSI标准 utf-8 .

    具有 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