【问题标题】:How to strip char 0x0 from the middle of a file in Ruby?如何从Ruby中的文件中间剥离char 0x0?
【发布时间】:2015-09-01 14:47:02
【问题描述】:

我正在尝试剥离在我的一个文件中找到的 0x0 字符,但我发现 xml 解析器正在阻塞它。

所以我使用 gsub:

xmlBody.gsub!(/\u0000/i,'')

替换它。 xml 解析器现在已经满足了。然后保存 xml 文件(使用 UTF-8 编码)。

但是,当我在 Sublime 文本编辑器中重新打开文件时,Sublime 崩溃了。当我使用另一个编辑器(不会崩溃)并将文件的 xml 内容复制/粘贴到 xml 验证器中时,验证器说 char 0x0 无效。似乎 gsub 没有真的 删除该字符。

有什么建议吗?

我还尝试对 xmlBody 使用 force_encoding("UTF-8"),并使用 xmlBody.delete!(0x0) 获得相同的结果。

【问题讨论】:

  • 我会用常规 File 类打开、替换和写回文件,尝试用 ST 打开,然后用 xml 解析器打开它
  • xml来自一个rest服务,是在xml解析之后写的。但是第一次写入文件时,0x0 已经在那里了。源是一个 mongodb 记录,里面有那个坏字符。
  • 所以你得到一个 0x0 的 xml 文件,在那之后你需要什么?肯定不会用ST打开吧?缺乏 iaa 的太多信息。您可以发布指向该服务的链接或有问题的文件吗?
  • 在文件写入时再次剥离字符,解决了这个问题。

标签: ruby unicode string-substitution


【解决方案1】:

xml 实际上包含文件内容。我确实去掉了其他字符,它们不在文件中。但是0x0不断回来。所以,我尝试在 xml 解析中删除(因此它会正确解析)并在文件写入时再次删除。它终于消失了。

output.write(utf8_encoded_content.gsub!(/\u0000/i, '')) output.close

【讨论】:

    猜你喜欢
    • 2018-04-03
    • 2010-09-21
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 2015-01-20
    • 2016-10-03
    • 1970-01-01
    相关资源
    最近更新 更多