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等) - 感谢他们.然而,这个问题是关于理解遗留代码的确切行为,所以我只对上面引用的代码的行为感兴趣.
测试表明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"区域设置更改为希腊语(希腊)后
相同的VBA代码写入包含字节的文件
BF F0 E1
Run Code Online (Sandbox Code Playgroud)
对应于Windows-1253(希腊语)字符???.
| 归档时间: |
|
| 查看次数: |
1213 次 |
| 最近记录: |