我有一个tr
命令,应该将特殊字符音译为标准[az] [AZ]字符,因为我正在整理输入,因为我无法接受某些特殊字符的输入,例如ÊÌÐÑÖØÙÜÝßàåæçèîïðõ。 / p>
但是,我的测试输入无法正常工作。
命令:
输入为Bío-Bío
,在echo命令中。
echo "Bío-Bío" | tr [ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ] [SOZsozYYuAAAAAAACEEEEIIIIDNOOOOOOUUUUYsaaaaaaaceeeeiiiionoooooouuuuyy]
实际输出:
B]] O-B]] O
期望输出:
比奥比奥
任何人都可以告诉我为什么会这样吗?
EDIT0 :
我检查并确认tr
命令中的两个字符串长度相同(69个字符)。
答案 0 :(得分:3)
两个参数字符串的长度实际上有所不同,因为第一个参数中的字符在UTF-8中以多个字节编码。我将上面的内容复制并粘贴到MacBook上的脚本中,然后在其上运行od -t x2
,并获得以下内容:
0000000 6365 6f68 2220 c342 6fad 422d adc3 226f
0000020 7c20 7420 2072 c55b c5a0 c592 c5bd c5a1
0000040 c593 c5be c2b8 c2a5 c3b5 c380 c381 c382
0000060 c383 c384 c385 c386 c387 c388 c389 c38a
0000100 c38b c38c c38d c38e c38f c390 c391 c392
0000120 c393 c394 c395 c396 c398 c399 c39a c39b
0000140 c39c c39d c39f c3a0 c3a1 c3a2 c3a3 c3a4
0000160 c3a5 c3a6 c3a7 c3a8 c3a9 c3aa c3ab c3ac
0000200 c3ad c3ae c3af c3b0 c3b1 c3b2 c3b3 c3b4
0000220 c3b5 c3b6 c3b8 c3b9 c3ba c3bb c3bc c3bd
0000240 5dbf 5b20 4f53 735a 7a6f 5959 4175 4141
0000260 4141 4141 4543 4545 4945 4949 4449 4f4e
0000300 4f4f 4f4f 554f 5555 5955 6173 6161 6161
0000320 6161 6563 6565 6965 6969 6f69 6f6e 6f6f
0000340 6f6f 756f 7575 7975 5d79 000a
查看所有0xc3
个字节?这些是以16位表示的UTF-8字符的高位字节。
至于如何修复:不确定。我想知道使用三位八进制转义符(\ nnn)来表示奇怪的字符会有所帮助。
答案 1 :(得分:3)
tr
命令无法理解UTF8。
使用iconv
可能会有更好的运气:
echo "Bío-Bío" | iconv -f utf8 -t ascii//translit