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

Hei*_*nzi 3 ms-access vba internationalization codepages

例:

Open "C:\...\someFile.txt" For Output As #1
Print #1, someString
Close #1
Run Code Online (Sandbox Code Playgroud)

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

在我的系统上,上面的代码似乎使用的是Windows-1252,但由于Open语句的文档和Print#语句的文档都没有提到字符串编码,我无法确定这是否是某些内置默认值或某些系统设置,我正在寻找一个明确的答案.


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

Gor*_*son 5

测试表明VBA Print命令将Unicode字符串转换为当前Windows"非Unicode程序的语言"系统区域设置的代码页的单字节字符集.这可以用下面的代码来说明,它试图写下希腊词???:

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
Run Code Online (Sandbox Code Playgroud)

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

3F 70 61
Run Code Online (Sandbox Code Playgroud)

对应于Windows-1252字符?pa.Windows-1252是最常见(但不正确)称为"ANSI"的字符集.

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

Greek.png

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

BF F0 E1
Run Code Online (Sandbox Code Playgroud)

对应于Windows-1253(希腊语)字符???.