【问题标题】:How to remove question mark garbage data, dynamically, from files?如何从文件中动态删除问号垃圾数据?
【发布时间】:2013-02-24 04:36:01
【问题描述】:

我有未知数量的文件散布着垃圾数据,我想动态删除所述垃圾数据,可能使用正则表达式。

它在浏览器的 HTML 文件中通常看起来像这样:

这是文件的开头,��

在文件中,它将如下所示:

这是文件的开头,xE2xA0

我尝试使用正则表达式编辑器将其删除,但无济于事,它根本找不到它。如何删除这些垃圾数据?同样,有些文件有各种 HTML 标记。

感谢您的帮助。

【问题讨论】:

  • 这听起来像是代码页问题。您可能正在使用错误的编码查看数据。例如,如果它是用 ISO 8859 编码的,而你用 Unicode 来查看它。干杯
  • 这不是垃圾数据,您使用了错误的编码来读取文件。你想做什么?我感觉你有一个XY Problem
  • 这是字符集问题。您的计算机无法识别这些字符,因此将它们显示为 ? xE2 是控制字符的表示,您不能使用正则表达式轻松删除它。 facebook.stackoverflow.com/questions/14946109/…
  • 感谢大家的贡献。我同意,这是一个 XY 问题。不幸的是,我很难确定字符编码集。 Notepad++ 将其编码为 UTF-8。我把它改成了ascii,问号变成了一个上面有一个胡萝卜符号的a。就删除它而言,引用的 stackoverflow 文章有很大帮助。但如果是 XY 问题,那么它在技术上并不能解决问题。尽管如此,如果我无法确定字符集,我还有什么选择?

标签: php html regex perl garbage


【解决方案1】:

出现这些是因为您网站上的字符集有问题。

例如,您的文件以 Unicode 格式存储,但您的 Content-Type 设置为 text/html; charset=ISO-8859-1。问题也可能是文本在数据库中的存储方式,或者文本在编程语言内部的表示方式。

与其试图去掉它们,不如让字符集正确。这通常是一个令人沮丧的过程,因为有很多地方可能会引入问题。

你没有说你使用什么技术。一般可以通过“字符集问题mysql”等具体技术搜索如何解决字符集问题来找到解决方法。

我建议使用命令行工具,例如 file 来检查文本文件存储在哪个字符集中,并使用 iconv 将文本文件从一个字符集转换为另一个字符集。

【讨论】:

  • 感谢您的帮助。我不确定这些页面最初是用什么编码的。不幸的是,它们不是我的页面。它主要是静态代码,数据库不在这个等式中。页面显示为 UTF-8(我使用的是记事本 plus plus)。
  • 我还想补充一点,我不在 Unix/Linux 机器上,因为我使用的是 Windows。所以,file 和 iconv 是不可能的,但是对于将来的了解很好,谢谢。
【解决方案2】:

有两种可能。第一个不太可能,一个是您收到0xe2 0xa0 ...,因为文档中有Braille patterns

至于第二种可能性,0xa0NBSP0xe2 让我想起了ISO-8859-5

是否有可能有人从某个软件包的俄语版本中复制和粘贴内容?

你也可以get & use iconv on Windows

【讨论】:

  • 盲文没有检出,绝对不可能。我尝试了 ISO-8859-5,但没有奏效。可能是日语编码,我试过了,但没有用。绝对不是俄罗斯人。感谢您提供 iconv 的链接。我会安装它并更新这个空间。
  • 好的。感谢更新。此外,也可以尝试 Windows 版本的编码。祝你好运。
  • 我尝试了多种不同的编码集,但都没有消除控制字符。在短期内,我使用正则表达式删除了它们。我发现这些文件是从外部进程生成的,这意味着该进程可能正在注入控制字符。我对外部过程没有太多控制权。因此,删除它们可能是我任务的最佳选择。但这显然不是理想的解决方案,我理解。
猜你喜欢
  • 2016-09-15
  • 1970-01-01
  • 1970-01-01
  • 2013-01-02
  • 1970-01-01
  • 2014-09-12
  • 2013-05-18
  • 2019-08-03
  • 2021-08-30
相关资源
最近更新 更多