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

时间:2010-11-15 08:26:24

标签: python python-2.7 unicode utf-8

我有一个浏览器,它向我的Python服务器发送utf-8字符,但是当我从查询字符串中检索它时,Python返回的编码是ASCII。如何将普通字符串转换为utf-8?

注意:从Web传递的字符串已经是UTF-8编码的,我只想让Python将其视为UTF-8而不是ASCII。

11 个答案:

答案 0 :(得分:237)

>>> 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并指定编码。

答案 1 :(得分:65)

如果上述方法不起作用,您也可以告诉Python忽略无法转换为utf-8的字符串部分:

stringnamehere.decode('utf-8', 'ignore')

答案 2 :(得分:19)

可能有点矫枉过正,但是当我在同一个文件中使用ascii和unicode时,重复解码会很麻烦,这就是我使用的:

def make_unicode(input):
    if type(input) != unicode:
        input =  input.decode('utf-8')
        return input
    else:
        return input

答案 3 :(得分:13)

如果我理解正确,你的代码中会有一个utf-8编码的字节字符串。

将字节字符串转换为unicode字符串称为解码(unicode - &gt; byte-string is encoding)。

您可以使用unicode函数或decode方法执行此操作。之一:

unicodestr = unicode(bytestr, encoding)
unicodestr = unicode(bytestr, "utf-8")

或者:

unicodestr = bytestr.decode(encoding)
unicodestr = bytestr.decode("utf-8")

答案 4 :(得分:13)

将以下行添加到.py文件的顶部:

# -*- coding: utf-8 -*-

允许您直接在脚本中编码字符串,如下所示:

utfstr = "ボールト"

答案 5 :(得分:8)

city = 'Ribeir\xc3\xa3o Preto'
print city.decode('cp1252').encode('utf-8')

答案 6 :(得分:6)

在Python 3.6中,它们没有内置的unicode()方法。 默认情况下,字符串已存储为unicode,无需转换。例如:

my_str = "\u221a25"
print(my_str)
>>> √25

答案 7 :(得分:3)

使用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')
ñ

答案 8 :(得分:0)

  • 首先,Python中的strUnicode表示。
  • 第二,UTF-8是一种编码标准,用于将Unicode字符串编码为bytes。那里有许多编码标准(例如UTF-16ASCIISHIFT-JIS等)。

当客户端向您的服务器发送数据并且他们正在使用UTF-8时,他们正在发送一堆bytes而不是str

您收到了str,因为您正在使用的“库”或“框架”已将某些随机bytes隐式转换为str

引擎盖下只有一堆bytes。您只需要询问“库”即可在bytes中向您提供请求内容,然后您将自己进行解码(如果库不能给您,那么它就在尝试做黑魔法,那么您不应该使用它)。

  • UTF-8编码的bytes解码为strbs.decode('utf-8')
  • str编码为UTF-8 bytess.encode('utf-8')

答案 9 :(得分:0)

你也可以这样做:

from unidecode import unidecode
unidecode(yourStringtoDecode)

答案 10 :(得分:-1)

是的,您可以添加

# -*- coding: utf-8 -*-

在源代码的第一行。

您可以在这里https://www.python.org/dev/peps/pep-0263/

了解更多详细信息