【问题标题】:Remove certain Unicode (garbage) JSON characters [duplicate]删除某些 Unicode(垃圾)JSON 字符 [重复]
【发布时间】:2019-04-16 12:58:19
【问题描述】:

我正在从文件中读取数据,有时该文件包含一些时髦的东西,例如:

"䉌Āᜊ»ç‰ç•‡ï¼ƒè¸²æœ€ä²’Bíœë¨¿ä„€å•²ï²ä‹¾é¥˜BéŒé“‡ä„€â²ä‹¾â¢"

我需要删除/替换这些字符,因为 JSON 不知道如何处理它们。

它们不是控制字符(我认为),所以我目前的正则表达式

Regex.Replace(value, @"\p{C}+", string.Empty);

没有抓到他们。

许多读入的字符串会很长,超过 256 个字符,所以我宁愿不循环检查每个字符。

有没有简单的解决方案?我认为正则表达式可以解决它,但我不确定。

【问题讨论】:

  • 您正在使用错误的编码读取文件。
  • 这就是我的想法,但 99% 的读取字符串都是有效的,这些可能每 1000 次读取就会发生一次。这很可能是数据损坏,因为这些是日志文件的残余。
  • 如果你看,这就是我找到我正在使用的正则表达式的答案:)
  • 当你遇到这样的垃圾数据时,是整个文件,还是只是文件的一部分?另外,我认为您的标题不准确,因为这些是可打印的字符。

标签: c# json regex


【解决方案1】:

如果你想要的只是 ASCII 那么你可以这样做:

Regex.Replace(value, @"[^\x00-\x7F]+", string.Empty);

如果你想要的只是“普通”的 ASCII 字符,你可以这样做:

Regex.Replace(value, @"[^\x20-\x7E]+", string.Empty);

【讨论】: