gpt4 book ai didi

vba - 使用 VBA 将 UTF-8 转换为 ANSI

转载 作者:行者123 更新时间:2023-12-02 02:41:40 29 4
gpt4 key购买 nike

我有一个 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 中的Open 函数仅适用于ANSI 编码文件和二进制文件。如果您希望读取/写入 utf-8 文件,则必须找到其他方法。

utf-8 编码的字符集比 ANSI 更大,因此无法从 ANSI 转换为 utf-8 无损。也就是说,Excel 和 VBA 中的 String 存储为 utf-16(VBA 编辑器仍然使用 ANSI),因此您只需转换从 utf-8utf-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

关于vba - 使用 VBA 将 UTF-8 转换为 ANSI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45301892/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com