VBA 内置文件操作使用哪种字符串编码?

Which string encoding do the VBA built-in file operations use?

示例:

Open "C:\...\someFile.txt" For Output As #1
Print #1, someString
Close #1

如果 someString 包含非 ASCII 字符,它们是如何编码的?(UTF-8、Latin-1、某些代码页取决于 Windows 语言环境,. ..)

在我的系统上,上面的代码 似乎 使用 Windows-1252,但是由于 Open statement nor the documentation of the Print # statement 的文档都没有提到字符串编码,我无法确定这是某些内置默认设置还是某些系统设置,我正在寻找权威答案。


注意:感谢大家提出有关如何使用特定编码(ADODB.Stream、Scripting.FileSystemObject 等)创建文件的替代方法 - 感谢他们。然而,这个问题是关于理解遗留代码的确切行为,所以我只对上面引用的代码的行为感兴趣。

测试表明 VBA Print 命令将 Unicode 字符串转换为当前 Windows "Language for non-Unicode programs" 系统区域设置的代码页的单字节字符集。这可以用下面的代码来说明,它试图写出希腊词 Ώπα:

Option Compare Database
Option Explicit

Sub GreekTest()
    Dim someString As String
    someString = ChrW(&H38F) & ChrW(&H3C0) & ChrW(&H3B1)
    Open "C:\Users\Gord\Desktop\someFile.txt" For Output As #1
    Print #1, someString
    Close #1
End Sub

当 运行 和 Windows 设置为美国英语的默认语言环境时,生成的文件包含字节

3F 70 61

对应Windows-1252个字符?pa。 Windows-1252 是最常(但不正确)称为 "ANSI".

的字符集

但是,将 Windows "non-Unicode" 区域设置更改为希腊语(希腊)后

相同的VBA代码写入包含字节的文件

BF F0 E1

对应 Windows-1253(希腊语)字符 Ώπα.