gpt4 book ai didi

ruby - libxml 将重音字符转换为反斜杠 x 转义符。杰森不开心

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

我在使用 libxml 读取的 xml 节点中具有以下属性。如果我打印出 reader.node,它会正常打印带有重音字符。

reader = XML::Reader.new(File.open("somefile.xml", "r"))
reader.read
reader.read
...
p reader.node

=> ... Full_Name="Univisión Network - East Feed" ...

不过,如果我这样做,它就会逃脱。

p reader.node["Full_Name"]
=> "Univisi\xC3\xB3n Network - East Feed"

当我尝试将此值转换为 json laater 时,出现以下错误。

Encoding::UndefinedConversionError: "\xC3" from ASCII-8BIT to UTF-8

这是文档中的xml行

<?xml version="1.0" encoding="ISO-8859-1"?>

我无法控制 xml 文档本身。我怎样才能将该 unicode 字符返回到 json 中,或者返回到 json 可以理解的格式中?

编辑:哦,我忘了说 - 这是它在实际 XML 文档中的样子

Full_Name="Univisi&#243;n Network - East Feed" 

最佳答案

所以,我仍然完全不知道为什么我找不到“正确”的方法,但是 this thread帮助找到了 String 类上的 force_encoding 方法。由于我的代码涉及将属性复制到散列中,因此在复制值时调用 force_encoding 没什么大不了的。

我加倍确保已将文件保存为 UTF-8,并将正确的 xml 声明放在顶部。还是失败了。

无论如何,在我弄清楚如何解决实际问题之前,这段代码已经解决了它。

  object = { type: node.name }      
node.attributes.each do |attribute|
name = attribute.name.gsub /_/,""
value = attribute.value.force_encoding('UTF-8')

object[name] = value
end

请注意,如果我不需要将节点复制到散列中,这将是不合适的,因为它绝对不值得所有的麻烦。如果我那么做

object.to_json

它工作没有问题。谢谢大家的帮助斧头!您知道如何强制对 xml 进行编码吗?

关于ruby - libxml 将重音字符转换为反斜杠 x 转义符。杰森不开心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2148729/

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