我是python的新手,我有一个像这样的字符串:
s= 'HDCF\xc3\x82\xc2\xae FTAE\xc3\x82\xc2\xae Greater China'
我想删除字符串中的所有unicode文字,例如:
'\xc3\x82\xc2\xae'
我需要如下输出:
'HDFC FTAE Greater China'
有人可以帮我吗?
谢谢
答案 0 :(得分:3)
如果您的目标是将字符串限制为与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
。
答案 1 :(得分:2)
您可以使用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
参考this问题。
答案 2 :(得分:1)
在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转换回bytes 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代码点。
答案 3 :(得分:0)
可能是这个帮助
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