繁体   English   中英

在字符串python中删除utf-8文字

[英]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

str.encode()bytes.decode()

您可以使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM