我有一个浏览器,它向我的Python服务器发送utf-8字符,但当我从查询字符串中检索它时,Python返回的编码是ASCII。如何将普通字符串转换为utf-8?

注意:从web传递的字符串已经被UTF-8编码,我只是想让Python将其视为UTF-8而不是ASCII。


当前回答

url被翻译成ASCII码,而对Python服务器来说,它只是一个Unicode字符串,例如: “T % C3%A9st % C3%A3o”

Python将“é”和“ã”理解为实际的%C3%A9和%C3%A3。

你可以像这样编码URL:

import urllib
url = "T%C3%A9st%C3%A3o"
print(urllib.parse.unquote(url))
>> Téstão

详情见https://www.adamsmith.haus/python/answers/how-to-decode-a-utf-8-url-in-python。

其他回答

你还可以这样做:

from unidecode import unidecode
unidecode(yourStringtoDecode)

如果我理解正确的话,您的代码中有一个utf-8编码的字节字符串。

将字节字符串转换为unicode字符串称为解码(unicode ->字节字符串是编码)。

可以通过使用unicode函数或decode方法来实现。:

unicodestr = unicode(bytestr, encoding)
unicodestr = unicode(bytestr, "utf-8")

Or:

unicodestr = bytestr.decode(encoding)
unicodestr = bytestr.decode("utf-8")

url被翻译成ASCII码,而对Python服务器来说,它只是一个Unicode字符串,例如: “T % C3%A9st % C3%A3o”

Python将“é”和“ã”理解为实际的%C3%A9和%C3%A3。

你可以像这样编码URL:

import urllib
url = "T%C3%A9st%C3%A3o"
print(urllib.parse.unquote(url))
>> Téstão

详情见https://www.adamsmith.haus/python/answers/how-to-decode-a-utf-8-url-in-python。

如果上面的方法不起作用,你也可以告诉Python忽略字符串中不能转换为utf-8的部分:

stringnamehere.decode('utf-8', 'ignore')

在.py文件的顶部添加以下一行:

# -*- coding: utf-8 -*-

允许你在脚本中直接编码字符串,就像这样:

utfstr = "ボールト"