Ruby中我的XML之前的字符无效

mcv*_*mcv 1 ruby xml rexml

当我查看XML文件时,它看起来很好,并开始 <?xml version="1.0" encoding="utf-16le" standalone="yes"?>

但是当我在Ruby中读取它并将其打印到粗壮时,前面有两个: ??<?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)
Run Code Online (Sandbox Code Playgroud)

最后一个put打印出正确的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
Run Code Online (Sandbox Code Playgroud)

编辑3:它似乎是由StringIO(在Ruby 1.8.7中)不支持unicode引起的.我不确定是否有解决方法.

Fre*_*ung 5

这两个字符很可能是一个unicode bom:字节告诉谁正在读取文件的字节顺序.

只要您知道文件的编码是什么,剥离它们应该是安全的 - 它们不是实际内容