我有一个浏览器将UTF-8字符发送到我的Python服务器,但是当我从查询字符串中检索时,Python返回的编码是ASCII。如何将普通字符串转换为UTF-8?
注意:从web传递的字符串已经使用UTF-8编码,我只想让Python将其视为UTF-8而不是ASCII。
我有一个浏览器将UTF-8字符发送到我的Python服务器,但是当我从查询字符串中检索时,Python返回的编码是ASCII。如何将普通字符串转换为UTF-8?
注意:从web传递的字符串已经使用UTF-8编码,我只想让Python将其视为UTF-8而不是ASCII。
>>> plain_string = "Hi!"
>>> unicode_string = u"Hi!"
>>> type(plain_string), type(unicode_string)
(<type 'str'>, <type 'unicode'>)
^ 这就是字节字符串(plain_string)和 Unicode 字符串之间的区别。
>>> s = "Hello!"
>>> u = unicode(s, "utf-8")
^ 转换为Unicode并指定编码。
所有字符串都是Unicode格式。 unicode
函数已经不存在了。请参考 @Noumenon 的答案。
UnicodeDecodeError: 'utf8' codec can't decode byte 0xb0 in position 2: invalid start byte
这是我的代码:
ret=[]for line in csvReader:
cline=[]
for elm in line:
unicodestr = unicode(elm, 'utf-8')
cline.append(unicodestr)
ret.append(cline)
- Gopakumar N Gunicode()
函数也不存在。 - Noumenonu
转换回 str
格式(将 u
转换回 s
)? - TanguyU+2340
(⍀),有没有什么方法可以实现呢? - Sha2b如果以上方法不能解决问题,你也可以告诉Python忽略它无法转换为utf-8的字符串部分:
stringnamehere.decode('utf-8', 'ignore')
可能有点过头了,但是当我在同一个文件中同时使用ascii和unicode编码时,重复解码会很麻烦,这就是我使用的方法:
def make_unicode(inp):
if type(inp) != unicode:
inp = inp.decode('utf-8')
return inp
unicode
类型已经不存在了。 - Mike Pennington在您的.py文件顶部添加以下行:
# -*- coding: utf-8 -*-
允许您直接在脚本中编码字符串,就像这样:
utfstr = "ボールト"
from __future__ import unicode_literals
,要么使用 u''
前缀。不要在 bytes
字面量中使用非 ASCII 字符。如果需要,可以稍后使用 utf8bytes = unicode_text.encode('utf-8')
来获取 utf-8 字节。 - jfsfrom __future__ import unicode_literals
会如何帮助我将包含非ASCII字符的字符串转换为UTF-8? - Ortal Turgemancity = 'Ribeir\xc3\xa3o Preto'
print city.decode('cp1252').encode('utf-8')
在Python 3.6中,它们没有内置的unicode()方法。字符串默认已经存储为unicode,不需要转换。例如:
my_str = "\u221a25"
print(my_str)
>>> √25
>>> C = 'ñ'
>>> U = C.decode('utf8')
>>> U
u'\xf1'
>>> ord(U)
241
>>> unichr(241)
u'\xf1'
>>> print unichr(241).encode('utf8')
ñ
将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
str
是用 Unicode
表示的。UTF-8
是一种编码标准,用于将 Unicode
字符串编码为 bytes
。有许多编码标准可供选择(例如 UTF-16
、ASCII
、SHIFT-JIS
等)。当客户端使用 UTF-8
发送数据到您的服务器时,它们发送的是一堆 bytes
,而不是 str
。
您收到了一个 str
,因为您正在使用的“库”或“框架”已经将一些随机的 bytes
隐式转换为 str
。
在底层,只有一堆 bytes
。您只需要要求“库”以 bytes
的形式提供请求内容,然后您将自己处理解码(如果库无法提供,则可能存在黑魔法,您不应该使用它)。
UTF-8
编码的 bytes
解码为 str
:bs.decode('utf-8')
str
编码为 UTF-8
的 bytes
:s.encode('utf-8')
"some_string".encode('utf-8').decode('utf-8')
进行处理。 - devssh