当我查看 XML 文件时,它看起来很好,并且以<?xml version="1.0" encoding="utf-16le" standalone="yes"?>
但是当我用 Ruby 阅读它并将其打印出来时,前面有两个 ?s:??<?xml version="1.0" encoding="utf-16le" standalone="yes"?>
这些来自哪里,我如何删除它们?用 REXML 像这样解析它会立即失败。删除第一个字符然后解析它,给我这个错误:
REXML::ParseException: #<REXML::ParseException: malformed XML: missing tag start
Line:
Position:
Last 80 unconsumed characters:
<?xml version="1.0" encoding="utf-16le" s>
处理这个问题的正确方法是什么?
编辑:下面是我的代码。从ftp.get
ftp 服务器下载 xml。(我想知道这是否相关。)
xml = ftp.get
puts xml
until xml[0,1] == "<" # to remove the 2 invalid characters
puts xml[0,2]
xml.slice! 0
end
puts xml
document = REXML::Document.new(xml)
最后一个 puts 打印正确的 xml。但是由于这两个无效字符,我感觉有些地方出了问题。没有必要删除任何东西。不过,我不知道问题可能是什么。
编辑 2:我正在使用 Net::FTP 下载 XML,但使用这种新方法可以让我将内容读入字符串而不是文件:
class Net::FTP
def gettextcontent(remotefile, &block) # :yield: line
f = StringIO.new()
begin
retrlines("RETR " + remotefile) do |line|
f.puts(line)
yield(line) if block
end
ensure
f.close
return f
end
end
end
编辑 3:这似乎是由不支持 unicode 的 StringIO(在 Ruby 1.8.7 中)引起的。我不确定是否有解决方法。