参考:
- https://www.asciitable.com/
- https://xdays.me/%E5%A4%84%E7%90%86%E9%9D%9E%E5%8F%AF%E8%A7%81%E5%AD%97%E7%AC%A6/
平时一些文档中可能存在一些非可见的特殊字符,导致文档编码出现异常,针对这些字符可以针对性的进行处理。
一、查看非可见字符
- cat -A
- vim打开文件,然后输入 set list命令
通过如下代码,可以输出0-255的所有字符
output = ''
for i in range(0, 255):
output = str(i) + "," + '%c\n' % i
print(output)
使用cat -A就可以查看字符。可以看出来对应不同的ACSII编号对应的字符是不一样的。
python t.py > 1
# 去掉脚本中的str(i)
python t.py | cat -A > 2
paste 1 2 -d ","
如下三列分别是:ACSII编号,%c格式化的输出,cat -A的输出(这里蓝色的是看不见的字符)
前15个如下是完整的对应表以及一些解释说明。
0-127字符,来自网络,侵删
128-255字符,来自网络,侵删
二、处理非可见字符
比如,我之前遇到的一个问题,就是vimdiff比较两个文件的时候发现有一个文件字符不对应,出现了一个M-BM-
的字符
查看上述字符对应的表格,这个字符应该是有两部分组成:M-B
和M-
;分别对应的是194和160的字符。也就是后续替换掉这两个字符就可以去除
image.png
我们要处理这些特殊字符可以使用sed命令来进行替换。
1)、替换空白的字符
sed -E 's/[^[:print:]]/mmm/g' test.txt # 这里的mmm可以修改为空
但是只能替换如下的字符:
2)、根据转义字符进行替换
我们也可以根据转义字符进行替换,比如替换上述字符可以直接使用如下代码。
sed 's/\xc2\xa0//g' test.txt | cat -A
那么这里的\xc2\xa0
是啥呢?其实就是这个M-BM-
组合字符对应的转义字符。也就说我们只要知道了对应字符的转移字符就可以进行针对性的替换。
我们要怎么获取转义字符对应的符号呢?我在网上找了一个输出的代码:
for i in range(0, 255):
# 使用chr()函数获取字符,比如获取ASCII码72对应的字符'H'
char = chr(i)
# 使用格式化方法获取八进制转义序列
octal_escape = '\\{:03o}'.format(i)
# 使用格式化方法获取十六进制转义序列
hex_escape = '\\x{:02x}'.format(i)
# 最后输出
print(f"{i},{char},{octal_escape},{hex_escape}")
但是我在运行的时候,发现python2和python3环境输出的不太一样。目前不太清楚原因,不过sed命令的替换主要是参照py2的结果,如果是看py3的对应字符的话就是在对应的字符前面多了B-M
也就是需要再加上\xc2
。
3)、ASCII编码对应的转义字符对应表
注意:
- 这里的输出字符是
cat -A
的输出,有的字符在文档中的显示可能是空或者乱码 - 第2、3列分别为python两个版本的输出
- 我们找到对应的不可见字符的转义字符,就可以直接使用sed进行替换了
ASCII码 | Python 2 输出 | Python 3 输出 | 转义字符 |
---|---|---|---|
0 | ^@ |
^@ |
\x00 |
1 | ^A |
^A |
\x01 |
2 | ^B |
^B |
\x02 |
3 | ^C |
^C |
\x03 |
4 | ^D |
^D |
\x04 |
5 | ^E |
^E |
\x05 |
6 | ^F |
^F |
\x06 |
7 | ^G |
^G |
\x07 |
8 | ^H |
^H |
\x08 |
9 | ^I |
^I |
\x09 (制表符) |
10 | ^J |
^J |
\x0a (换行符) |
11 | ^K |
^K |
\x0b |
12 | ^L |
^L |
\x0c (换页符) |
13 | ^M |
^M |
\x0d (回车符) |
14 | ^N |
^N |
\x0e |
15 | ^O |
^O |
\x0f |
16 | ^P |
^P |
\x10 |
17 | ^Q |
^Q |
\x11 |
18 | ^R |
^R |
\x12 |
19 | ^S |
^S |
\x13 |
20 | ^T |
^T |
\x14 |
21 | ^U |
^U |
\x15 |
22 | ^V |
^V |
\x16 |
23 | ^W |
^W |
\x17 |
24 | ^X |
^X |
\x18 |
25 | ^Y |
^Y |
\x19 |
26 | ^Z |
^Z |
\x1a |
27 | ^[ |
^[ |
\x1b (转义) |
28 | ^\ |
^\ |
\x1c |
29 | ^] |
^] |
\x1d |
30 | ^^ |
^^ |
\x1e |
31 | ^_ |
^_ |
\x1f |
32 | (空格) | (空格) | \x20 |
33 | ! |
! |
\x21 |
34 | " |
" |
\x22 |
35 | # |
# |
\x23 |
36 | $ |
$ |
\x24 |
37 | % |
% |
\x25 |
38 | & |
& |
\x26 |
39 | ' |
' |
\x27 |
40 | ( |
( |
\x28 |
41 | ) |
) |
\x29 |
42 | * |
* |
\x2a |
43 | + |
+ |
\x2b |
44 | , |
, |
\x2c |
45 | - |
- |
\x2d |
46 | . |
. |
\x2e |
47 | / |
/ |
\x2f |
48 | 0 |
0 |
\x30 |
49 | 1 |
1 |
\x31 |
50 | 2 |
2 |
\x32 |
51 | 3 |
3 |
\x33 |
52 | 4 |
4 |
\x34 |
53 | 5 |
5 |
\x35 |
54 | 6 |
6 |
\x36 |
55 | 7 |
7 |
\x37 |
56 | 8 |
8 |
\x38 |
57 | 9 |
9 |
\x39 |
58 | : |
: |
\x3a |
59 | ; |
; |
\x3b |
60 | < |
< |
\x3c |
61 | = |
= |
\x3d |
62 | > |
> |
\x3e |
63 | ? |
? |
\x3f |
64 | @ |
@ |
\x40 |
65 | A |
A |
\x41 |
66 | B |
B |
\x42 |
67 | C |
C |
\x43 |
68 | D |
D |
\x44 |
69 | E |
E |
\x45 |
70 | F |
F |
\x46 |
71 | G |
G |
\x47 |
72 | H |
H |
\x48 |
73 | I |
I |
\x49 |
74 | J |
J |
\x4a |
75 | K |
K |
\x4b |
76 | L |
L |
\x4c |
77 | M |
M |
\x4d |
78 | N |
N |
\x4e |
79 | O |
O |
\x4f |
80 | P |
P |
\x50 |
81 | Q |
Q |
\x51 |
82 | R |
R |
\x52 |
83 | S |
S |
\x53 |
84 | T |
T |
\x54 |
85 | U |
U |
\x55 |
86 | V |
V |
\x56 |
87 | W |
W |
\x57 |
88 | X |
X |
\x58 |
89 | Y |
Y |
\x59 |
90 | Z |
Z |
\x5a |
91 | [ |
[ |
\x5b |
92 | \ |
\ |
\x5c |
93 | ] |
] |
\x5d |
94 | ^ |
^ |
\x5e |
95 | _ |
_ |
\x5f |
96 | `` | `` | \x60 |
97 | a |
a |
\x61 |
98 | b |
b |
\x62 |
99 | c |
c |
\x63 |
100 | d |
d |
\x64 |
101 | e |
e |
\x65 |
102 | f |
f |
\x66 |
103 | g |
g |
\x67 |
104 | h |
h |
\x68 |
105 | i |
i |
\x69 |
106 | j |
j |
\x6a |
107 | k |
k |
\x6b |
108 | l |
l |
\x6c |
109 | m |
m |
\x6d |
110 | n |
n |
\x6e |
111 | o |
o |
\x6f |
112 | p |
p |
\x70 |
113 | q |
q |
\x71 |
114 | r |
r |
\x72 |
115 | s |
s |
\x73 |
116 | t |
t |
\x74 |
117 | u |
u |
\x75 |
118 | v |
v |
\x76 |
119 | w |
w |
\x77 |
120 | x |
x |
\x78 |
121 | y |
y |
\x79 |
122 | z |
z |
\x7a |
123 | [ |
[ |
\x7b |
124 | | |
| |
\x7c |
125 | ] |
] |
\x7d |
126 | ^~ |
~ |
\x7e |
127 | ^? |
^? |
\x7f |
128 | M-^@ |
M-BM-^@ |
\x80 |
129 | M-^A |
M-BM-^A |
\x81 |
130 | M-^B |
M-BM-^B |
\x82 |
131 | M-^C |
M-BM-^C |
\x83 |
132 | M-^D |
M-BM-^D |
\x84 |
133 | M-^E |
M-BM-^E |
\x85 |
134 | M-^F |
M-BM-^F |
\x86 |
135 | M-^G |
M-BM-^G |
\x87 |
136 | M-^H |
M-BM-^H |
\x88 |
137 | M-^I |
M-BM-^I |
\x89 |
138 | M-^J |
M-BM-^J |
\x8a |
139 | M-^K |
M-BM-^K |
\x8b |
140 | M-^L |
M-BM-^L |
\x8c |
141 | M-^M |
M-BM-^M |
\x8d |
142 | M-^N |
M-BM-^N |
\x8e |
143 | M-^O |
M-BM-^O |
\x8f |
144 | M-^P |
M-BM-^P |
\x90 |
145 | M-^Q |
M-BM-^Q |
\x91 |
146 | M-^R |
M-BM-^R |
\x92 |
147 | M-^S |
M-BM-^S |
\x93 |
148 | M-^T |
M-BM-^T |
\x94 |
149 | M-^U |
M-BM-^U |
\x95 |
150 | M-^V |
M-BM-^V |
\x96 |
151 | M-^W |
M-BM-^W |
\x97 |
152 | M-^X |
M-BM-^X |
\x98 |
153 | M-^Y |
M-BM-^Y |
\x99 |
154 | M-^Z |
M-BM-^Z |
\x9a |
155 | M-^[ |
M-BM-^[ |
\x9b |
156 | M-^\ |
M-BM-^\ |
\x9c |
157 | M-^] |
M-BM-^] |
\x9d |
158 | M-^^ |
M-BM-^^ |
\x9e |
159 | M-^_ |
M-BM-^_ |
\x9f |
160 |
M- (末尾有空格) |
M-BM- (末尾有空格) |
\xa0 |
161 | M-! |
M-BM-! |
\xa1 |
162 | M-" |
M-BM-" |
\xa2 |
163 | M-# |
M-BM-# |
\xa3 |
164 | M-$ |
M-BM-$ |
\xa4 |
165 | M-% |
M-BM-% |
\xa5 |
166 | M-& |
M-BM-& |
\xa6 |
167 | M-' |
M-BM-' |
\xa7 |
168 | M-( |
M-BM-( |
\xa8 |
169 | M-) |
M-BM-) |
\xa9 |
170 | M-* |
M-BM-* |
\xaa |
171 | M-+ |
M-BM-+ |
\xab |
172 | M-, |
M-BM-, |
\xac |
173 | M-- |
M-BM-- |
\xad |
174 | M-. |
M-BM-. |
\xae |
175 | M-/ |
M-BM-/ |
\xaf |
176 | M-0 |
M-BM-0 |
\xb0 |
177 | M-1 |
M-BM-1 |
\xb1 |
178 | M-2 |
M-BM-2 |
\xb2 |
179 | M-3 |
M-BM-3 |
\xb3 |
180 | M-4 |
M-BM-4 |
\xb4 |
181 | M-5 |
M-BM-5 |
\xb5 |
182 | M-6 |
M-BM-6 |
\xb6 |
183 | M-7 |
M-BM-7 |
\xb7 |
184 | M-8 |
M-BM-8 |
\xb8 |
185 | M-9 |
M-BM-9 |
\xb9 |
186 | M-: |
M-BM-: |
\xba |
187 | M-; |
M-BM-; |
\xbb |
188 | M-< |
M-BM-< |
\xbc |
189 | M-= |
M-BM-= |
\xbd |
190 | M-> |
M-BM-> |
\xbe |
191 | M-? |
M-BM-? |
\xbf |
192 | M-@ |
M-CM-^@ |
\xc0 |
193 | M-A |
M-CM-^A |
\xc1 |
194 | M-B |
M-CM-^B |
\xc2 |
195 | M-C |
M-CM-^C |
\xc3 |
196 | M-D |
M-CM-^D |
\xc4 |
197 | M-E |
M-CM-^E |
\xc5 |
198 | M-F |
M-CM-^F |
\xc6 |
199 | M-G |
M-CM-^G |
\xc7 |
200 | M-H |
M-CM-^H |
\xc8 |
201 | M-I |
M-CM-^I |
\xc9 |
202 | M-J |
M-CM-^J |
\xca |
203 | M-K |
M-CM-^K |
\xcb |
204 | M-L |
M-CM-^L |
\xcc |
205 | M-M |
M-CM-^M |
\xcd |
206 | M-N |
M-CM-^N |
\xce |
207 | M-O |
M-CM-^O |
\xcf |
208 | M-P |
M-CM-^P |
\xd0 |
209 | M-Q |
M-CM-^Q |
\xd1 |
210 | M-R |
M-CM-^R |
\xd2 |
211 | M-S |
M-CM-^S |
\xd3 |
212 | M-T |
M-CM-^T |
\xd4 |
213 | M-U |
M-CM-^U |
\xd5 |
214 | M-V |
M-CM-^V |
\xd6 |
215 | M-W |
M-CM-^W |
\xd7 |
216 | M-X |
M-CM-^X |
\xd8 |
217 | M-Y |
M-CM-^Y |
\xd9 |
218 | M-Z |
M-CM-^Z |
\xda |
219 | M-[ |
M-CM-^[ |
\xdb |
220 | M-\ |
M-CM-\ |
\xdc |
221 | M-] |
M-CM-^] |
\xdd |
222 | M-^ |
M-CM-^^ |
\xde |
223 | M-_ |
M-CM-^_ |
\xdf |
224 | M-` | M-CM- |
\xe0 |
225 | M-a |
M-CM-! |
\xe1 |
226 | M-b |
M-CM-" |
\xe2 |
227 | M-c |
M-CM-# |
\xe3 |
228 | M-d |
M-CM-$ |
\xe4 |
229 | M-e |
M-CM-% |
\xe5 |
230 | M-f |
M-CM-& |
\xe6 |
231 | M-g |
M-CM-' |
\xe7 |
232 | M-h |
M-CM-( |
\xe8 |
233 | M-i |
M-CM-) |
\xe9 |
234 | M-j |
M-CM-* |
\xea |
235 | M-k |
M-CM-+ |
\xeb |
236 | M-l |
M-CM-, |
\xec |
237 | M-m |
M-CM-- |
\xed |
238 | M-n |
M-CM-. |
\xee |
239 | M-o |
M-CM-/ |
\xef |
240 | M-p |
M-CM-0 |
\xf0 |
241 | M-q |
M-CM-1 |
\xf1 |
242 | M-r |
M-CM-2 |
\xf2 |
243 | M-s |
M-CM-3 |
\xf3 |
244 | M-t |
M-CM-4 |
\xf4 |
245 | M-u |
M-CM-5 |
\xf5 |
246 | M-v |
M-CM-6 |
\xf6 |
247 | M-w |
M-CM-7 |
\xf7 |
248 | M-x |
M-CM-8 |
\xf8 |
249 | M-y |
M-CM-9 |
\xf9 |
250 | M-z |
M-CM-: |
\xfa |
251 | M-{ |
M-CM-; |
\xfb |
252 | M-| |
M-CM-< |
\xfc |
253 | M-} |
M-CM-= |
\xfd |
254 | M-~ |
M-CM-> |
\xfe |
网友评论