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

处理非可见字符

作者: 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