VBA-使用utf8字符处理文件夹名称

VBA-使用utf8字符处理文件夹名称,vba,Vba,我使用Application.FileDialog(msoFileDialogFolderPicker)选择一个文件夹,它可以很好地处理utf8名称的文件夹。 但是当我尝试调试时,打印SelectedItems(1)的结果或将其保存到配置文件或执行任何操作时,我会释放文件夹的重音符号 例如: 原始文件夹: “D:\Śākta” “Debug.Print”或保存到utf8文件结果保存: “D:\Sakta”(删除所有重音) 问题是,我试图将所选文件夹保存到配置文件中,当我尝试加载它时,下一次它当然

我使用
Application.FileDialog(msoFileDialogFolderPicker)
选择一个文件夹,它可以很好地处理utf8名称的文件夹。 但是当我尝试
调试时,打印
SelectedItems(1)
的结果或将其保存到配置文件或执行任何操作时,我会释放文件夹的重音符号

例如: 原始文件夹:
“D:\Śākta”

“Debug.Print”或保存到utf8文件结果保存:
“D:\Sakta”
(删除所有重音)

问题是,我试图将所选文件夹保存到配置文件中,当我尝试加载它时,下一次它当然不会识别为真正的文件夹,因为缺少重音符号

如何获取带有重音符号的文件夹的真实名称,以便在之后保存,而不是保存它的“表示”?

更新:
刚刚检查过,甚至输入框也会消除口音

@John Coleman的回答解决了将文件保存切换到“ADODB.Stream”的问题

下面是一个读取和写入支持UTF8的配置文件的示例:

公共函数fileExists(ByVal fullFilename作为字符串)为布尔值
fileExists=CreateObject(“Scripting.FileSystemObject”).fileExists(fullFilename)
端函数
公共函数ReadTextFile(ByVal sPath作为字符串)作为字符串
如果文件存在(sPath),则
作为对象的Dim fsT
设置fsT=CreateObject(“ADODB.Stream”)
fsT.Mode=adModeRead
fsT.Type=2'指定流类型-我们希望保存文本/字符串数据。
fsT.Charset=“utf-8”指定源文本数据的字符集。
打开“打开流并将二进制数据写入对象”
fsT.LoadFromFile(sPath)
ReadTextFile=fsT.ReadText
关闭
设置fsT=Nothing
其他的
ReadTextFile=“”
如果结束
端函数
作为布尔值的公共函数WriteTextFile(ByVal s作为字符串,ByVal sPath作为字符串)
Dim objStreamUTF8NoBOM:Set objStreamUTF8NoBOM=CreateObject(“ADODB.Stream”)
作为对象的Dim fsT
设置fsT=CreateObject(“ADODB.Stream”)
fsT.Type=2'指定流类型-我们希望保存文本/字符串数据。
fsT.Charset=“utf-8”指定源文本数据的字符集。
打开“打开流并将二进制数据写入对象”
fsT.WriteText s
fsT.位置=0
fsT.SaveToFile sPath,2'将二进制数据保存到磁盘
fsT.位置=3
使用objStreamUTF8NoBOM
.Type=1
打开
fsT.CopyTo objStreamUTF8NoBOM
.SaveToFile sPath,2
接近
以
关闭
设置fsT=Nothing
设置objStreamUTF8NoBOM=Nothing
端函数
函数设置设置(ByVal Keyname作为字符串,ByVal Wstr作为字符串)作为字符串
Dim设置文件内容
settingsFileContent=ReadTextFile(文件名)
Set RE=CreateObject(“VBScript.RegExp”)
RE.Pattern=Keyname+“=.*”
RE.MultiLine=1
如果重新测试(设置文件内容),则
settingsFileContent=RE.Replace(settingsFileContent,Keyname+“=”+Wstr)
其他的
settingsFileContent=settingsFileContent+IIf(Len(settingsFileContent)=0,”,vbNewLine)+Keyname+“=”+Wstr
如果结束
WriteTextFile设置文件内容,文件名
设置设置=Wstr
端函数
私有函数GetSettings(ByVal Keyname作为字符串)作为字符串
Dim设置文件内容为字符串
settingsFileContent=ReadTextFile(文件名)
Set RE=CreateObject(“VBScript.RegExp”)
RE.MultiLine=1
RE.Global=1
RE.Pattern=“\r”
settingsFileContent=RE.Replace(settingsFileContent,“”)
RE.Global=0
RE.Pattern=“^”+Keyname+”=(.*)”
Set allMatches=RE.Execute(设置文件内容)
如果所有匹配。则计数0
Debug.Print(Keyname+:“+所有匹配项。项(0)。子匹配项。项(0)+”)
GetSettings=allMatches.Item(0).SubMatches.Item(0)
其他的
GetSettings=“”
如果结束
端函数

Debug.Print
受到VBA编辑器不支持Unicode的限制。我不担心这一点,但能够将它们保存到文件中当然更重要。请提供一个显示如何保存它的文件。是的,VB字符串在内部是Unicode的,只有IDE(如控制台)和UI元素(如MsgBox)不是。将所选路径保存到Unicode(!)文件时,它是否保持不变?此问题可能会有所帮助(它几乎是一个重复的问题):。