美文网首页
处理非可见字符

处理非可见字符

作者: myshu | 来源:发表于2024-08-05 16:30 被阅读0次

参考:

平时一些文档中可能存在一些非可见的特殊字符,导致文档编码出现异常,针对这些字符可以针对性的进行处理。

一、查看非可见字符

  1. cat -A
  2. 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-BM-;分别对应的是194和160的字符。也就是后续替换掉这两个字符就可以去除

image.png
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

相关文章

网友评论

      本文标题:处理非可见字符

      本文链接:https://www.haomeiwen.com/subject/giyxkjtx.html