How to convert a string to utf-8 in Python
我有一个浏览器,它向我的Python服务器发送utf-8字符,但是当我从查询字符串中检索它时,Python返回的编码是ASCII。 如何将纯字符串转换为utf-8?
注意:从Web传递的字符串已经是UTF-8编码的,我只想让Python将其视为UTF-8而不是ASCII。
1 2 3 4 | >>> plain_string ="Hi!" >>> unicode_string = u"Hi!" >>> type(plain_string), type(unicode_string) (<type 'str'>, <type 'unicode'>) |
^这是字节字符串(plain_string)和unicode字符串之间的区别。
1 2 | >>> s ="Hello!" >>> u = unicode(s,"utf-8") |
^转换为unicode并指定编码。
如果上述方法不起作用,您还可以告诉Python忽略无法转换为utf-8的字符串部分:
1 | stringnamehere.decode('utf-8', 'ignore') |
可能有点矫枉过正,但是当我在同一个文件中使用ascii和unicode时,重复解码会很麻烦,这就是我使用的:
1 2 3 4 5 6 | def make_unicode(input): if type(input) != unicode: input = input.decode('utf-8') return input else: return input |
将以下行添加到.py文件的顶部:
1 | # -*- coding: utf-8 -*- |
允许您直接在脚本中编码字符串,如下所示:
1 | utfstr ="ボールト" |
如果我理解正确,你的代码中有一个utf-8编码的字节串。
将字节字符串转换为unicode字符串称为解码(unicode - > byte-string is encoding)。
您可以使用unicode函数或解码方法执行此操作。或者:
1 2 | unicodestr = unicode(bytestr, encoding) unicodestr = unicode(bytestr,"utf-8") |
要么:
1 2 | unicodestr = bytestr.decode(encoding) unicodestr = bytestr.decode("utf-8") |
1 2 | city = 'Ribeir\xc3\xa3o Preto' print city.decode('cp1252').encode('utf-8') |
在Python 3.6中,它们没有内置的unicode()方法。
默认情况下,字符串已存储为unicode,无需转换。例:
1 2 3 | my_str ="\u221a25" print(my_str) >>> √25 |
用ord()和unichar()翻译。
每个unicode char都有一个相关的数字,类似索引。所以Python有一些方法可以在char和他的数字之间进行转换。下行是一个?例。希望它可以提供帮助。
1 2 3 4 5 6 7 8 9 10 | >>> C = '?' >>> U = C.decode('utf8') >>> U u'\xf1' >>> ord(U) 241 >>> unichr(241) u'\xf1' >>> print unichr(241).encode('utf8') ? |