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(希腊语)字符 Ώπα
.
示例:
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(希腊语)字符 Ώπα
.