ruby更新到1.9.2后,对于编码问题碰到的少了不少,今天在Windows下,使用REXML解析一个编码为UTF-8的XML文件时,碰到了异常invalid byte sequence in GBK (ArgumentError),一看就知道是编码问题,尝试加上魔法注释# -*- coding: utf-8 -*-,仍旧异常——这只是让ruby解析器以UTF8解析代码文件,对于读写文件,这个并不管用
查看了一下读取代码,主要是这么两句
file = File.open 'G:\city.xml'
doc = REXML::Document.new file
REXML需要一个File对象,讲明对于文件的读取,实际上REXML是依靠File类的,REXML既然报GBK编码错误,那么是否说明File读取的是GBK编码的?
查了一下资料,File以系统默认编码读取文件,简体中文Windows下,默认编码是GBK。原来如此!
知道原因后就好改了,只需要在File读取时,指定读取时的编码就可以了,修改哪下
file = File.open 'G:\city.xml', 'r:utf-8'
doc = REXML::Document.new file
一切OK!