vbscript脚本用二进制方式读写文件
来源:互联网 发布:nginx过滤频繁请求ip 编辑:程序博客网 时间:2024/06/05 20:50
在项目中遇到这样的问题,程序中需要将用 Adodb.Stream生成的utf-8格式的csv文件导入mysql数据库中,当使用load data infile命令导入数据库以后,导入的表中的第一行第一列的数据总是有一个问号,而导入前用文本编辑器打开看不出有什么问题,经过调查最后发现文件的开始处有三个字节不可见的字符,用ultraEdit的16进制编辑方式可以看到是EF BB BF三个字节(注意,一定要用版本高一点的ue才可以看到utf-8文件正确的格式,最初我用ue 10.2版本看到的一直是FFFE两个字节,被老版本的给迷惑了。后来用ue的14.2版本才可以看到正确的格式。),查了些资料才知道这是utf-8文件的bom信息,utf-8的文件分有bom和无bom的两种,Adodb.Stream生成的文件是有bom的,而在导入数据库时,这三个字符被当作普通字符插入表中,所以造成了不想要的错误结果。
于是想办法解决这个问题,由于utf-8格式的文件,它的存储顺序与编码顺序是一致的,所以有bom和无bom格式的区别就是多了EF BB BF这三个字节,只要我们用二进制方式读取文件,跳过前三个字节就可以去掉这个bom了。要二进制方式操作文件,还是只能使用Adodb.Stream对象,写了个简单的测试例子如下:
http://blog.csdn.net/zmxj/archive/2009/02/27/3943742.aspx
操作二进制文件时,要注意type属性一定要设为1,就是二进制方式,否则,read方法会出错。Position属性值设为3,就是不读取前三个字节,read方法返回的是字节数组,如果你想验证前三个字节的内容,可以先不用设置Position属性,打个断点,就可以看到数组中的内容,前三个字节EF BB BF的十进制值为239,187,191。例子中,apachelog22.txt为操作后的文件,可以用十六进制方式打开两个文件对比一下是否正确。
关于utf-8的bom,已经二进制文件操作可以参考:
http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html
http://www.paulsadowski.com/WSH/getremotebinaryfile.htm
- vbscript脚本用二进制方式读写文件
- Vbscript 脚本实现文件的读写
- c++ 二进制方式读写文件
- Python 读写文件---pickle 二进制方式读写
- Vbscript 脚本编程3 关于文件的读写
- Python小记--二进制方式文件读写实践
- 用脚本批量文件重命名(VBScript)
- VBScript的读写文件操作
- 文本方式读写文件和以二进制方式
- 文件读写: 二进制方式和文本方式的区别
- 文件读写: 二进制方式和文本方式的区别
- 文件读写: 二进制方式和文本方式的区别
- 文件读写: 二进制方式和文本方式的区别
- 文件读写: 二进制方式和文本方式的区别
- 文件读写: 二进制方式和文本方式的区别
- (2011.07.26)以二进制方式读写文件(C++ Primer Plus)
- 以二进制和文本的方式读写文件
- 用perl读写二进制的文件
- TdxDBTreeView的节点移动排序
- 按下F2编辑节点
- 判断TdxDBTreeView的节点是否可编辑
- 全球最囧的爱情测试.....
- 生活中须知的十二著名法则
- vbscript脚本用二进制方式读写文件
- Facade 外观模式
- 开始整顿
- [双语阅读]Slumdog、Jai Ho!获选好莱坞年度词汇
- ubuntu中设置Evolution邮件客户端
- ASP.NET初学:认识.NET的集合
- printf的格式控制的完整格式
- 开发行业的就业感想...
- FRI FEB 27,2009