VBA - 在具有亚洲语言环境的系统上逐字节读取文件

时间:2010-03-04 08:00:30

标签: vba file-io

我试图将文件从二进制文件转换为文本,只需用十六进制代码替换每个字符即可。例如,字符“c”将替换为“63”。

我有一个在普通系统中工作正常的代码,但是在我需要使用它的PC中会崩溃,因为它将默认语言环境设置为中文。

我使用以下语句来读取一个字节 -

ch$ = " "
Get #f%, , ch$

我怀疑在逐字节读取文件时出现问题,因为它会跳过某些字节,因为它们形成复合字符。它可能读取2个字节,形成一个亚洲字符作为一个字节。因此,它形成的文件比预期的尺寸小得多。

如何逐字节读取文件?

此处粘贴完整代码:http://pastebin.com/kjpSnqzV

1 个答案:

答案 0 :(得分:2)

你的怀疑是正确的。 VB文件从PC上的默认代码页读取automatically converts个字符串到Unicode。在亚洲代码页上,某些字符表示为多个字节。

我建议你使用Byte变量而不是字符串 - 这将阻止VB过度使用。

Dim ch As Byte  
Get #f%, , ch  

原始代码的另一个可能问题是某些字节序列在亚洲代码页上是非法的(它们不代表有效字符)。因此,您的代码可能会遇到某些输入文件的错误,但可能您希望它可以与任何文件一起使用。