我正在尝试用正常的空间替换从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))
with open('output.html', 'w') as outf:
outf.write(copy)
提供输出:
â 0xe2 'â' 226
€ 0x20ac '€' 8364
Ż 0x17b 'Ż' 379
â 0xe2 'â' 226
€ 0x20ac '€' 8364
Ż 0x17b 'Ż' 379
n 0x6e 'n' 110
并且output.html与input.html相同尝试将其替换为:
copy.replace(u"\u202f", ".")
copy.replace("\0xe2\0x20ac\0x17b", "")
copy.replace(' ', ' ')
还有更多配置,但似乎没有任何实际作用
我想将所有不间断空格作为html文件中的普通空格,但是我不知道该怎么做。
此空格超过一个字符。
此空间大于一个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')
>>> mybytes
b'a\xe2\x80\xafb'
>>> mybytes.replace(b'\xe2\x80\xaf', b'.')
b'a.b'