我有一个浏览器,它向我的Python服务器发送utf-8字符,但是当我从查询字符串中检索它时,Python返回的编码是ASCII。 如何将纯字符串转换为utf-8?
注意:从Web传递的字符串已经是UTF-8编码的,我只想让Python将其视为UTF-8而不是ASCII。
试试这个链接http://evanjones.ca/python-utf8.html
我认为一个更好的标题是如何在没有翻译的情况下将字符串强制转换为unicode?
在2018年,python 3如果你得到ascii解码错误做"some_string".encode('utf-8').decode('utf-8')
>>> plain_string ="Hi!"
>>> unicode_string = u"Hi!"
>>> type(plain_string), type(unicode_string)
(, )
^这是字节字符串(plain_string)和unicode字符串之间的区别。
>>> s ="Hello!"
>>> u = unicode(s,"utf-8")
^转换为unicode并指定编码。
,我收到以下错误:UnicodeDecodeError: 'utf8' codec can't decode byte 0xb0 in position 2: invalid start byte这是我的代码:ret = []用于csvReader中的行:cline = []用于行中的elm:unicodestr = unicode(elm,'utf-8')cline.append( unicodestr)ret.append(cline)
这些都不适用于Python 3,所有字符串都是unicode,unicode()不存在。
有点碰到这个,但谢谢。这解决了我试图打印unicode并且正在获取的问题。
如何将u转换回str格式(将u转换回s)?
@Tanguy thisIsAString = u'abcd'.encode('utf-8')
只有文本不包含非ascii字符时,此代码才有效;字符串上的简单重音字符会使其失败。
如果上述方法不起作用,您还可以告诉Python忽略无法转换为utf-8的字符串部分:
stringnamehere.decode('utf-8', 'ignore')
得到了AttributeError:'str'对象没有属性'decode'
@ saran3h听起来你正在使用Python 3,在这种情况下,Python应该为你处理编码问题。您是否尝试过在不指定编码的情况下阅读文档?
可能有点矫枉过正,但是当我在同一个文件中使用ascii和unicode时,重复解码会很麻烦,这就是我使用的:
def make_unicode(input):
if type(input) != unicode:
input = input.decode('utf-8')
return input
else:
return input
将以下行添加到.py文件的顶部:
# -*- coding: utf-8 -*-
允许您直接在脚本中编码字符串,如下所示:
utfstr ="ボールト"
这不是OP要求的。但无论如何要避免这样的字符串文字。它在Python 3中创建了Unicode字符串(很好)但它在Python 2中是一个字节串(坏)。在顶部添加from __future__ import unicode_literals或使用u''前缀。不要在bytes文字中使用非ascii字符。要获得utf-8字节,如果有必要,可以稍后utf8bytes = unicode_text.encode('utf-8')。
@jfs from __future__ import unicode_literals将如何帮助我将带有非ascii字符的字符串转换为utf-8?
@OrtalTurgeman我没有回答这个问题。看,这是评论,而不是答案。我的评论解决了答案中代码的问题。它试图在Python 2上创建一个带有非ascii字符的字节串(它是Python 3上的SyntaxError - 字节文字禁止)。
如果我理解正确,你的代码中有一个utf-8编码的字节串。
将字节字符串转换为unicode字符串称为解码(unicode - > byte-string is encoding)。
您可以使用unicode函数或解码方法执行此操作。或者:
unicodestr = unicode(bytestr, encoding)
unicodestr = unicode(bytestr,"utf-8")
要么:
unicodestr = bytestr.decode(encoding)
unicodestr = bytestr.decode("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 char都有一个相关的数字,类似索引。所以Python有一些方法可以在char和他的数字之间进行转换。下行是一个?例。希望它可以提供帮助。
>>> C = '?'
>>> U = C.decode('utf8')
>>> U
u'\xf1'
>>> ord(U)
241
>>> unichr(241)
u'\xf1'
>>> print unichr(241).encode('utf8')
?