unix 如何将Unicode字符替换为ASCII

eqqqjvef  于 12个月前  发布在  Unix
关注(0)|答案(4)|浏览(195)

我有下面的命令来替换Unicode字符与ASCII的。

sed -i 's/Ã/A/g'

字符串
问题是Ã在我的Unix环境中不能被sed命令识别,所以我假设你用它的十六进制值来替换它。如果我用C3来代替,语法会是什么样子?
我使用此命令作为模板,用于我想用空格替换的其他字符,例如:
sed -i 's/©/ /g'

wwwo4jvm

wwwo4jvm1#

可以在“sed”中使用十六进制值。

echo "Ã" | hexdump -C
00000000  c3 83 0a                                          |...|
00000003

字符串
好的,这个字符是两个字节的组合“c3 83”。让我们用一个字节“A”来代替它:

echo "Ã" |sed 's/\xc3\x83/A/g'
A


解释:\x表示“sed”后面跟着一个十六进制代码。

alen0pnh

alen0pnh2#

你可以使用iconv:

iconv -f utf-8 -t ascii//translit -o output.txt input.txt

字符串

vsdwdz23

vsdwdz233#

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

zzoitvuj

zzoitvuj4#

还有uconv,来自ICU
示例如下:

  • uconv -x "::NFD; [:Nonspacing Mark:] > ; ::NFC;":删除重音符号
  • uconv -x "::Latin; ::Latin-ASCII;":用于音译拉丁语/阿拉伯语
  • uconv -x "::Latin; ::Latin-ASCII; ([^\x00-\x7F]) > ;":用于拉丁文/阿拉伯文的音译,并删除剩余的代码点> 0x 7 F
  • ...

echo "À l'école ☠" | uconv -x "::Latin; ::Latin-ASCII; ([^\x00-\x7F]) > ;"给出:A l'ecole

相关问题