我有一个将 utf-8 字符发送到我的 Python 服务器的浏览器,但是当我从查询字符串中检索它时,Python 返回的编码是 ASCII。如何将纯字符串转换为 utf-8?
注意:从 Web 传递的字符串已经是 UTF-8 编码的,我只想让 Python 将其视为 UTF-8 而不是 ASCII。
"some_string".encode('utf-8').decode('utf-8')
在 Python 2 中
>>> 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 并指定编码。
在 Python 3 中
所有字符串都是 unicode。 unicode
函数不再存在。请参阅@Noumenon 的回答
如果上述方法不起作用,您还可以告诉 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
类型
将以下行添加到 .py 文件的顶部:
# -*- coding: utf-8 -*-
允许您直接在脚本中对字符串进行编码,如下所示:
utfstr = "ボールト"
from __future__ import unicode_literals
或使用 u''
前缀。不要在 bytes
文字中使用非 ascii 字符。要获取 utf-8 字节,如有必要,您可以稍后utf8bytes = unicode_text.encode('utf-8')
。
from __future__ import unicode_literals
如何帮助我将非 ascii 字符的字符串转换为 utf-8?
city = 'Ribeir\xc3\xa3o Preto'
print city.decode('cp1252').encode('utf-8')
在 Python 3.6 中,它们没有内置的 unicode() 方法。默认情况下,字符串已存储为 unicode,无需转换。例子:
my_str = "\u221a25"
print(my_str)
>>> √25
使用 ord() 和 unichar() 进行翻译。每个 unicode 字符都有一个关联的数字,类似于索引。所以 Python 有一些方法可以在字符和他的数字之间进行转换。 Downside 是一个例子。希望它可以提供帮助。
>>> C = 'ñ'
>>> U = C.decode('utf8')
>>> U
u'\xf1'
>>> ord(U)
241
>>> unichr(241)
u'\xf1'
>>> print unichr(241).encode('utf8')
ñ
首先,Python 中的 str 用 Unicode 表示。
其次,UTF-8 是将 Unicode 字符串编码为字节的编码标准。那里有许多编码标准(例如 UTF-16、ASCII、SHIFT-JIS 等)。
当客户端向您的服务器发送数据并且他们正在使用 UTF-8
时,他们发送的是一堆 bytes
而不是 str
。
您收到 str
是因为您使用的“库”或“框架”已将一些随机 bytes
隐式转换为 str
。
在引擎盖下,只有一堆 bytes
。您只需要让“库”在 bytes
中为您提供请求内容,您将自己处理解码(如果库不能给您,那么它正在尝试做黑魔法,那么您不应该使用它)。
将 UTF-8 编码字节解码为 str:bs.decode('utf-8')
将 str 编码为 UTF-8 字节:s.encode('utf-8')
你也可以这样做:
from unidecode import unidecode
unidecode(yourStringtoDecode)
unidecode
是什么?这是pypi.org/project/Unidecode吗?如果它是第 3 方包,请提供信息,以及如何安装/使用它。
不定期副业成功案例分享
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)unicode()
不存在。u
转换回str
格式(将u
转换回s
)?"2340"
,并且您想打印 unicode 字符U+2340
(⍀),有什么办法吗?