我正在尝试用正常的空间替换从Word复制的不间断空间,但是对我来说似乎没有任何作用。
我已经尝试将此空间读取为Unicode和十六进制,然后将其替换为正常。根据https://unicode-table.com/en/202F/,它是Narrow No-Break Space,但看起来这个空间是多个字符。
input.html看起来像这样(前面2x窄无间隙空间:]
n
我的脚本:
with open('input.html', 'r+') as f:
copy = f.read()
for line in copy:
for char in line:
print(char, hex(ord(char)), end = ' ')
print(repr(char), ord(char))
提供输出:
â 0xe2 'â' 226
€ 0x20ac '€' 8364
Ż 0x17b 'Ż' 379
â 0xe2 'â' 226
€ 0x20ac '€' 8364
Ż 0x17b 'Ż' 379
n 0x6e 'n' 110
试图用:代替空格
copy.replace(u"\u202f", ".")
copy.replace("\0xe2\0x20ac\0x17b", ".")
copy.replace(' ', '.')
还有更多配置,但似乎没有任何实际作用。
我想将所有不间断空格作为html文件中的普通空格,但是我不知道该怎么做。
替换空格:
copyb = bytes(copy, 'utf8')
copyb = copyb.replace(b'\xc3\xa2\xe2\x82\xac\xc5\xbb', b'.')
但是由于(如果我是对的)copyb是一个对象,所以我不明白为什么replace()在这种情况下不能以这种方式起作用(Python 3.7):
copyb = bytes(copy, 'utf8')
copyb.replace(b'\xc3\xa2\xe2\x82\xac\xc5\xbb', b'.')
此空格超过一个字符。
此空间大于一个byte。 UTF8字符可以为up to 4 bytes。
关于字符串对象和字节对象之间的区别似乎也有些混乱。 Eli Bendersky在the difference上有一篇不错的文章。要在字节对象中引用不可打印的字符,请在两个十六进制数字前加上\ x,例如'\ x12',而不是'\ 0x12'。
对于0xe2,您可能会想到一个hex数字,它是一个int表示形式:
>>> 0x10
16
您的问题是关于替换此字符,所以让我们开始吧。
>>> mystr = 'a\u202fb'
>>> print(mystr)
a b
>>> mystr.replace('\u202f', '.')
'a.b'
>>> mybytes = bytes('a\u202fb', 'utf8')
>>> print(mybytes)
b'a\xe2\x80\xafb'
>>> mybytes.replace(b'\xe2\x80\xaf', b'.')
b'a.b'