如何在Python中将字符串转换为utf-8

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')
?