处理非可见字符

参考:

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

一、查看非可见字符

  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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,589评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,615评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,933评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,976评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,999评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,775评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,474评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,359评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,854评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,007评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,146评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,826评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,484评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,029评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,153评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,420评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,107评论 2 356

推荐阅读更多精彩内容