[英]Remove utf-8 literals in a string python
我是python的新手,我有一个像这样的字符串:
s= 'HDCF\xc3\x82\xc2\xae FTAE\xc3\x82\xc2\xae Greater China'
我想删除字符串中的所有unicode文字,例如:
'\xc3\x82\xc2\xae'
我需要像这样的输出:
'HDFC FTAE Greater China'
谁能帮我这个?
谢谢
如果您的目标是将字符串限制为与ASCII兼容的字符,则可以将其编码为ASCII并忽略无法编码的字符,然后再次对其进行解码:
x = 'HDCF\xc3\x82\xc2\xae FTAE\xc3\x82\xc2\xae Greater China'
print(x.encode("ascii", "ignore").decode("utf-8"))
生产HDCF FTAE Greater China
。
您可以使用string.printable
函数过滤字符串,以检查是否可以打印您的字符:
import string
s= 'HDCF\xc3\x82\xc2\xae FTAE\xc3\x82\xc2\xae Greater China'
printable = set(string.printable)
s = "".join(filter(lambda c: c in printable, s))
print(s)
输出:
HDCF FTAE Greater China
参考这个问题。
在Python 2上(默认字符串类型为字节):
>>> s = 'HDCF\xc3\x82\xc2\xae FTAE\xc3\x82\xc2\xae Greater China'
>>> s.decode('ascii',errors='ignore').encode('ascii')
'HDCF FTAE Greater China'
在Python 3上(默认字符串类型为Unicode):
>>> s = 'HDCF\xc3\x82\xc2\xae FTAE\xc3\x82\xc2\xae Greater China'
>>> s.encode('ascii',errors='ignore').decode('ascii')
'HDCF FTAE Greater China'
请注意,原始字符串是mojibake 。 理想情况下,修复字符串的读取方式,但是您可以使用(Python 3)消除损坏:
>>> s.encode('latin1').decode('utf8').encode('latin1').decode('utf8')
'HDCF® FTAE® Greater China'
原始字符串被双重编码为UTF-8。 这是通过将字符串直接1:1转换回字节1 ,解码为UTF-8,然后再次直接转换回字节并再次使用UTF-8解码而起作用的。
这是Python 2版本:
>>> s = 'HDCF\xc3\x82\xc2\xae FTAE\xc3\x82\xc2\xae Greater China'
>>> print s.decode('utf8').encode('latin1').decode('utf8')
HDCF® FTAE® Greater China
1之所以起作用,是因为latin1
编解码器是256字节的编码,并且直接映射到前256个Unicode代码点。
可能是这个帮助,
s = 'HDCF\xc3\x82\xc2\xae FTAE\xc3\x82\xc2\xae Greater China'
d = ''.join([i for i in s if ord(i) < 127])
print(d)
# OUTPUT as: HDCF FTAE Greater China
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.