Ruby过滤二进制数据

时间:2013-04-26 07:15:06

标签: ruby parsing filter rake sphinx

我正在使用sphinx xmlpipe和rake任务搜索ms文件文件,以便为他编写格式化的xml。那当我遇到问题。基本上我所做的是检测MIME :: Types.type_for的文件类型,如果这个文件doc或docx用catdoc读取它或提取它的word / document.xml,问题是当task返回xml中的特定条目时,sphinx无法索引,他完成了xml解析错误:

XML parse error: not well-formed (invalid token)

当我看到什么任务返回时,我看到索引在看起来像二进制数据条目的行上破坏了。 我可以做什么从文本中过滤二进制数据,或至少用它们检测文档,以便sphinx可以完成索引?

1 个答案:

答案 0 :(得分:0)

经过额外的谷歌搜索后,我终于找到了解决方案。

string.scan(/.*?((?:[\t\n\r\x20-\x7E])+|(?:\xD0[\x90-\xBF])+|(?:\xD1[\x80-\x8F])+|).*?/);

此正则表达式将仅选择标准ASCII符号和西里尔语多字节UTF-8字符(俄语/保加利亚语字符)。 这个正则表达式:

/.*?((?:[\t\n\r\x20-\x7E])+|(?:\xD0[\x90-\xBF])+|(?:\xD1[\x80-\x8F])+|(?:\xC3[\x80-\xBF])+|).*?/

允许您选择其他方言字符,例如带分音符的UTF-8拉丁字母,代字号?喜欢:“ä”,“ö”,“ü”

非常感谢这个人的博客:http://blog.famzah.net/2010/07/01/filter-a-character-sequence-leaving-only-valid-utf-8-characters/我找到了答案< 3< 3< 3