如何消除这个Unicode字符?

4

请问有什么办法可以从一大堆文本文件中移除这个烦人的字符U+0092?我尝试了下面的所有方法,但都没有效果。该字符可以在字符映射表中找到,名称为U+0092+控制

sed -i 's/\xc2\x92//' *
sed -i 's/\u0092//' *
sed -i 's///' *

啊,我找到了一种方法:
CHARS=$(python2 -c 'print u"\u0092".encode("utf8")')
sed 's/['"$CHARS"']//g'

但是有没有直接的sed方法来实现这个呢?

1
单引号将阻止您的 shell 解析任何反引号的转义符号。我不确定 sed 是否会自己执行此操作,因此可以尝试双引号? - Ulrich Schwarz
这个家伙很棘手。它是一些非空格断点,是U+0092出现在文本中但不可见的字符。 - alvas
3
U+0092是一个从未使用的控制字符。它几乎总是由于在Windows代码页1252文件中错误解码单引号为ISO-8859-1而产生。这两种编码非常相似,但是字节范围0x80-0x9F编码的字符不同。在这种情况下,您不应该摆脱它或其他智能引号字符,而应正确地将它们读取为ISO-8859-1,或将文件从1252转换为8859-1或UTF-8。 - bobince
2个回答

3
尝试使用sed "s/\`//g" *。(我添加了g,以便它可以删除它找到的所有反引号)。
编辑: 这不是OP想要删除的反引号。
按照此问题中的解决方案,应该会起作用。
sed 's/\xc2\x92//g'

展示它的功能如下:
$ CHARS=$(python -c 'print u"asdf\u0092asdf".encode("utf8")')

$ echo $CHARS
asdf<funny glyph symbol>asdf

$ echo $CHARS | sed 's/\xc2\x92//g'
asdfasdf

既然您已经尝试过,也许您的文本文件中并不是U+0092字符?


啊,我明白了。在这种情况下,请看一下这个解决方案:https://dev59.com/9Goy5IYBdhLWcg3wa9bf#8562661 - mathematical.coffee
这是一个奇怪的事情。sed 's/\xc2\x92//g' 没有起作用,但是 CHARS=$(python -c 'print u"\u0092".encode("utf8")') sed 's/['"$CHARS"']//g' 很好用。由于 u0092 和 \xc2\x92 应该是相同的字符,我不确定为什么一个有效而另一个无效。 - alvas
很好奇,如果你能弄清楚我为什么感兴趣,那就太好了! - mathematical.coffee

1
这可能适用于您(GNU sed):
echo "string containing funny character(s)" | sed -n 'l0'

这将会以八进制的形式显示字符串,然后使用:

echo "string containing funny character(s)" | sed 's/\onnn//g'

在编程中,nnn代表八进制值,用于删除它/它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接