带有 "xe2x80x93" "-" 字符的普通字符串
Normal string with "xe2x80x93" "-" char
我在 python3 中遇到字符串问题。我的 var g 是一个普通的字符串。但是里面有一个烦人的"xe2x80x93",因为它来自网络解析器。我想将其转换为合适的字符 "-"-".
content = str(urllib.request.urlopen(site, timeout=10).read())
g = content.split('<h1 itemprop="name"')[1].split('</span></h1>')[0].split('<span>')[1].replace("\", "")
print(type(g)) --> string
print(g) --> "Flash xe2x80x93 der rote Blitz"
print(g.encode('latin-1').decode('utf-8')) --> AttributeError: 'str' object has no attribute 'decode'
print(repr(g.decode('unicode-escape'))) --> AttributeError: 'str' object has no attribute 'decode'
print(g.encode('ascii','replace')) --> b'Flash xe2x80x93 der rote Blitz'
print(bytes(g, "utf-8").decode()) --> "Flash xe2x80x93 der rote Blitz"
print(bytes(g, "utf-8").decode("unicode_escape")) --> "Flash â der rote Blitz"
它是如何工作的?我没有进一步了解。
你对 decode
的想法是正确的。
通过将 str(...)
中的输出包装在这一行中:
content = str(urllib.request.urlopen(site, timeout=10).read())
您要么将字节对象转换为字符串(这将通过 content
中的前导 b'
和尾随 '
明显看出),或者,如果它已经被解码为 ISO-8859-1,什么都不做。
在任何一种情况下,都不要这样做 -- 删除包装 str
调用。
现在,内容将是 bytes
对象或 str
对象。
因此,如果它是一个字符串,它就会被(错误地)解码为 ISO-8859-1。您需要将其编码回字节对象,然后正确解码:
content = urllib.request.urlopen(site, timeout=10).read()
if isinstance(content, str):
content = content.encode('iso-8859-1')
content = content.decode('utf8')
现在,您的 \xe2\x80\x93
字节应该正确显示为:–
更新:
根据您的评论,您需要做的就是:
content = urllib.request.urlopen(site, timeout=10).read().decode('utf8')
我在 python3 中遇到字符串问题。我的 var g 是一个普通的字符串。但是里面有一个烦人的"xe2x80x93",因为它来自网络解析器。我想将其转换为合适的字符 "-"-".
content = str(urllib.request.urlopen(site, timeout=10).read())
g = content.split('<h1 itemprop="name"')[1].split('</span></h1>')[0].split('<span>')[1].replace("\", "")
print(type(g)) --> string
print(g) --> "Flash xe2x80x93 der rote Blitz"
print(g.encode('latin-1').decode('utf-8')) --> AttributeError: 'str' object has no attribute 'decode'
print(repr(g.decode('unicode-escape'))) --> AttributeError: 'str' object has no attribute 'decode'
print(g.encode('ascii','replace')) --> b'Flash xe2x80x93 der rote Blitz'
print(bytes(g, "utf-8").decode()) --> "Flash xe2x80x93 der rote Blitz"
print(bytes(g, "utf-8").decode("unicode_escape")) --> "Flash â der rote Blitz"
它是如何工作的?我没有进一步了解。
你对 decode
的想法是正确的。
通过将 str(...)
中的输出包装在这一行中:
content = str(urllib.request.urlopen(site, timeout=10).read())
您要么将字节对象转换为字符串(这将通过 content
中的前导 b'
和尾随 '
明显看出),或者,如果它已经被解码为 ISO-8859-1,什么都不做。
在任何一种情况下,都不要这样做 -- 删除包装 str
调用。
现在,内容将是 bytes
对象或 str
对象。
因此,如果它是一个字符串,它就会被(错误地)解码为 ISO-8859-1。您需要将其编码回字节对象,然后正确解码:
content = urllib.request.urlopen(site, timeout=10).read()
if isinstance(content, str):
content = content.encode('iso-8859-1')
content = content.decode('utf8')
现在,您的 \xe2\x80\x93
字节应该正确显示为:–
更新:
根据您的评论,您需要做的就是:
content = urllib.request.urlopen(site, timeout=10).read().decode('utf8')