在字符串python

时间:2018-08-06 11:55:30

标签: python string unicode utf-8 hex

我是python的新手,我有一个像这样的字符串:

s= 'HDCF\xc3\x82\xc2\xae FTAE\xc3\x82\xc2\xae Greater China'

我想删除字符串中的所有unicode文字,例如:

'\xc3\x82\xc2\xae'

我需要如下输出:

'HDFC FTAE Greater China'

有人可以帮我吗?

谢谢

4 个答案:

答案 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

签出str.encode()bytes.decode()

答案 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