xdays

处理非可见字符

August 21, 2019

有时候复制粘贴命令或者配置的时候明明看着是对的,可是就是报错,这时候就要怀疑文本里是不是有不可见字符了。

那么如何找出不可见字符呢?

我目前有两种方式:

  1. 通过cat -A命令,这个命令看到了如^IM-BM-^@之类的,就是不可见字符
  2. 通过 vim 的set list命令也可以显示出不可见字符,另外捎带说下在 vim 的编辑模式下先敲 Ctrl+V,然后敲字符的十进制的 ASCII 编码也可以输入特殊字符,比如这个®

还有个有意思的点,这些^IM-BM-^@到底是啥玩意儿,通过这个回答我们知道这是一种表示字符的方式而已。

下面我用脚本把扩展 ASCII 码的 256 个字符打印出来,然后传给cat -A一看就明白了。

脚本ascii-char.py

output = ''
for i in range(0, 255):
    output += '%c\n' % i
print(output)

输出结果

~/ascii-char.py | cat -A
^@$
^A$
^B$
^C$
^D$
^E$
^F$
^G$
^H$
^I$
$
$
^K$
^L$
^M$
^N$
^O$
^P$
^Q$
^R$
^S$
^T$
^U$
^V$
^W$
^X$
^Y$
^Z$
^[$
^\$
^]$
^^$
^_$
 $
!$
"$
#$
$$
%$
&$
'$
($
)$
*$
+$
,$
-$
.$
/$
0$
1$
2$
3$
4$
5$
6$
7$
8$
9$
:$
;$
<$
=$
>$
?$
@$
A$
B$
C$
D$
E$
F$
G$
H$
I$
J$
K$
L$
M$
N$
O$
P$
Q$
R$
S$
T$
U$
V$
W$
X$
Y$
Z$
[$
\$
]$
^$
_$
`$
a$
b$
c$
d$
e$
f$
g$
h$
i$
j$
k$
l$
m$
n$
o$
p$
q$
r$
s$
t$
u$
v$
w$
x$
y$
z$
{$
|$
}$
~$
^?$
M-BM-^@$
M-BM-^A$
M-BM-^B$
M-BM-^C$
M-BM-^D$
M-BM-^E$
M-BM-^F$
M-BM-^G$
M-BM-^H$
M-BM-^I$
M-BM-^J$
M-BM-^K$
M-BM-^L$
M-BM-^M$
M-BM-^N$
M-BM-^O$
M-BM-^P$
M-BM-^Q$
M-BM-^R$
M-BM-^S$
M-BM-^T$
M-BM-^U$
M-BM-^V$
M-BM-^W$
M-BM-^X$
M-BM-^Y$
M-BM-^Z$
M-BM-^[$
M-BM-^\$
M-BM-^]$
M-BM-^^$
M-BM-^_$
M-BM- $
M-BM-!$
M-BM-"$
M-BM-#$
M-BM-$$
M-BM-%$
M-BM-&$
M-BM-'$
M-BM-($
M-BM-)$
M-BM-*$
M-BM-+$
M-BM-,$
M-BM--$
M-BM-.$
M-BM-/$
M-BM-0$
M-BM-1$
M-BM-2$
M-BM-3$
M-BM-4$
M-BM-5$
M-BM-6$
M-BM-7$
M-BM-8$
M-BM-9$
M-BM-:$
M-BM-;$
M-BM-<$
M-BM-=$
M-BM->$
M-BM-?$
M-CM-^@$
M-CM-^A$
M-CM-^B$
M-CM-^C$
M-CM-^D$
M-CM-^E$
M-CM-^F$
M-CM-^G$
M-CM-^H$
M-CM-^I$
M-CM-^J$
M-CM-^K$
M-CM-^L$
M-CM-^M$
M-CM-^N$
M-CM-^O$
M-CM-^P$
M-CM-^Q$
M-CM-^R$
M-CM-^S$
M-CM-^T$
M-CM-^U$
M-CM-^V$
M-CM-^W$
M-CM-^X$
M-CM-^Y$
M-CM-^Z$
M-CM-^[$
M-CM-^\$
M-CM-^]$
M-CM-^^$
M-CM-^_$
M-CM- $
M-CM-!$
M-CM-"$
M-CM-#$
M-CM-$$
M-CM-%$
M-CM-&$
M-CM-'$
M-CM-($
M-CM-)$
M-CM-*$
M-CM-+$
M-CM-,$
M-CM--$
M-CM-.$
M-CM-/$
M-CM-0$
M-CM-1$
M-CM-2$
M-CM-3$
M-CM-4$
M-CM-5$
M-CM-6$
M-CM-7$
M-CM-8$
M-CM-9$
M-CM-:$
M-CM-;$
M-CM-<$
M-CM-=$
M-CM->$
$