gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 17:37:38 25 4
gpt4 key购买 nike

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

但是当我在 Ruby 中读取它并将它打印到 stout 时,前面有两个 ?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 中)引起的。我不确定是否有解决方法。

最佳答案

这 2 个字符很可能是 unicode bom : 字节告诉正在读取文件的人字节顺序是什么。

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

关于ruby - Ruby 中我的 XML 之前的无效字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11671708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com