删除某些 Unicode(垃圾)JSON 字符 [重复]

Posted

技术标签:

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

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

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

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

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

Regex.Replace(value, @"\pC+", string.Empty);

没有抓到他们。

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

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

【问题讨论】:

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

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

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

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

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

【讨论】:

与***.com/a/123340/3832970 和***.com/a/18018166/3832970 相同。无需复制 SO 内容。 @WiktorStribiżew 然后将其标记为该问题的副本? 已经关闭了。

以上是关于删除某些 Unicode(垃圾)JSON 字符 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

GUI:如何确定是不是支持某些 Unicode 字符?

actionmailer 编码 - 在电子邮件客户端中呈现垃圾

匹配正则表达式中的 Unicode 字符

Unicode 转义不适用于某些字符

JSON字符串上的Unicode字符与swift 3和Alamofire

PHP - json_encode(string, JSON_UNESCAPED_UNICODE) 不转义捷克字符