如何用ASCII替换Unicode字符

San*_*hal 6 unix unicode bash shell sed

我有以下命令用Unicode替换Unicode字符.

sed -i 's/Ã/A/g'
Run Code Online (Sandbox Code Playgroud)

Ã我的Unix环境中的sed命令无法识别问题所以我假设你用它的十六进制值替换它.如果我使用它会是什么样的语法C3

我正在使用此命令作为其他字符的模板,我想用空格替换,例如:

sed -i's /©//g'

aja*_*kel 9

可以在"sed"中使用十六进制值.

echo "Ã" | hexdump -C
00000000  c3 83 0a                                          |...|
00000003
Run Code Online (Sandbox Code Playgroud)

好的,那个字符是两个字节组合"c3 83".让我们用单字节"A"代替它:

echo "Ã" |sed 's/\xc3\x83/A/g'
A
Run Code Online (Sandbox Code Playgroud)

说明:\ x表示"sed"后面是十六进制代码.

  • hexdump -C <<<Ö (2认同)

mid*_*ori 5

您可以使用iconv:

iconv -f utf-8 -t ascii//translit
Run Code Online (Sandbox Code Playgroud)

  • 您的意思是GNU iconv。并非iconv的所有版本都支持音译。 (3认同)

小智 5

尝试设置LANG=C,然后在Unicode范围内运行它:
echo "hi ? there ?" | LANG=C sed "s/[\x80-\xFF]//g"