使用REXML解析XML时碰到invalid byte sequence in GBK (ArgumentError)问题

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!

原文地址:https://www.cnblogs.com/varlxj/p/2222610.html