我有一个VB6应用程序,它执行文件夹的目录列表并获取文件名。其中一些是重音,例如“Guimarães.txt”(带有波浪号的小A)。 VB Dir函数和FileSystemObject函数都无法识别重音字符,而是将文件名返回为“Guimar?es.pdf”,因此我随后无法打开该文件。我可以在Windows资源管理器中正确地看到该文件
这只发生在一个运行Windows Server 2003 R2的实时环境中。在我们的测试系统中,我们可以正确读取文件,虽然这些主要是Windows 2008和Windows 7.我最初认为它归结为FSO版本,但由于“Dir”给出了相同的结果,我不再这么认为。此外,当我将文件的名称写入日志文件时,它也是不正确的。所以我认为在很早的阶段它无法处理角色,并用问号替换它。
我需要确定的是问题的原因:是Windows的版本还是我的区域设置(我无法查看,因为我的帐户被锁定),我该怎么办?解决问题。目前,我已经要求用户不要使用这些字符,但这不是一个长期的解决方案。
感谢。
答案 0 :(得分:2)
好的,从磁盘读取的文件名使用unicode。 当您尝试显示此字体时,正在使用的字体不支持该字形,因此它显示“?”,但将其写入磁盘会写入正确的表示形式。 当这被传递给文件函数时,它被“转换”为MBCS或其他字符集然后破坏。
您可以更改代码以使用本机范围的Win32 API调用,也可以只更改“非unicode程序的语言”以匹配文件名中使用的语言。