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

如何在Python中将字符串转换为utf-8,python,python-2.7,unicode,utf-8,Python,Python 2.7,Unicode,Utf 8,我有一个浏览器,它向我的Python服务器发送utf-8字符,但是当我从查询字符串中检索它时,Python返回的编码是ASCII。如何将普通字符串转换为utf-8 注意:从web传递的字符串已经是UTF-8编码的,我只想让Python将其视为UTF-8而不是ASCII。在Python 2中 ^转换为unicode并指定编码 在Python 3中 所有字符串都是unicode。unicode函数不再存在。请参阅@Noumenon的答案,如果我理解正确,您的代码中有一个utf-8编码的字节字符串 将

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

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

在Python 2中 ^转换为unicode并指定编码

在Python 3中
所有字符串都是unicode。
unicode
函数不再存在。请参阅@Noumenon的答案,如果我理解正确,您的代码中有一个utf-8编码的字节字符串

将字节字符串转换为unicode字符串称为解码(unicode->byte string为编码)

您可以使用函数或方法来实现这一点。要么:

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


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

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

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

# -*- coding: utf-8 -*-
允许您在脚本中直接对字符串进行编码,如下所示:

utfstr = "ボールト"

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

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

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

my_str = "\u221a25"
print(my_str)
>>> √25
使用ord()和unichar()进行翻译。 每个unicode字符都有一个关联的数字,类似于索引。因此Python有一些方法可以在字符和数字之间进行转换。缺点就是一个例子。希望能有所帮助

>>> C = 'ñ'
>>> U = C.decode('utf8')
>>> U
u'\xf1'
>>> ord(U)
241
>>> unichr(241)
u'\xf1'
>>> print unichr(241).encode('utf8')
ñ
是的,你可以加上

# -*- coding: utf-8 -*-
在源代码的第一行中

您可以在此处阅读更多详细信息

  • 首先,Python中的
    str
    Unicode
    表示
  • 其次,
    UTF-8
    是将
    Unicode
    字符串编码为
    字节的编码标准。有许多编码标准(例如,
    UTF-16
    ASCII
    SHIFT-JIS
    ,等等)
当客户端向您的服务器发送数据时,他们使用的是
UTF-8
,他们发送的是一堆
字节
而不是
str

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

引擎盖下只有一堆
字节
。您只需请求“库”以
字节的形式向您提供请求内容,您将自己处理解码(如果库无法提供,则它正在尝试使用黑魔法,则您不应使用它)

  • 解码
    UTF-8
    encoded
    bytes
    to
    str
    bs.Decode('UTF-8')
  • 编码
    str
    UTF-8
    bytes
    s.Encode('UTF-8')

,我得到了以下错误:
UnicodeDecodeError:'utf8'编解码器无法解码位置2的字节0xb0:无效的开始字节
这是我的代码:ret=[]用于csvReader中的行:cline=[]用于行中的elm:unicodesr=unicode(elm,'utf-8')cline.append(unicodest)ret.append(cline)这些都不适用于Python3,所有字符串都是unicode,并且
unicode()
不存在。这有点颠簸,但是谢谢。这修复了我试图打印unicode并且�s、 如何将
u
转换回
str
格式(将
u
转换回
s
)?此代码仅在文本不包含非ascii字符时有效;字符串上的简单重音字符将使其失败。尝试此链接我认为更好的标题是如何将字符串强制转换为unicode而不进行翻译?2018年,python 3如果出现ascii解码错误,请执行
“some_string”。encode('utf-8')。decode('utf-8')
这不是OP要求的。但无论如何都要避免这样的字符串文字。它在Python3中创建Unicode字符串(好),但在Python2中是ByTestString(坏)。在顶部添加来自未来导入unicode文本的
,或者使用
u''
前缀。不要在
字节中使用非ascii字符。要获取utf-8字节,如果有必要,您可以稍后进行
utf8bytes=unicode\u text.encode('utf-8')
。@jfs将如何
从未来导入unicode\u文本
帮助我将非ascii字符的字符串转换为utf-8?@OrtalTurgeman我没有回答这个问题。看,这是一个评论,不是回答。我的评论用答案中的代码解决了这个问题。它试图在Python2上创建一个带有非ascii字符的bytestring(这是Python3上的语法错误-字节文字禁止这样做)。Get AttributeError:'str'对象没有属性'decode'@saran3h听起来像是在使用Python3,在这种情况下,Python应该为您处理编码问题。您是否尝试过在不指定编码的情况下读取文档?Python默认选择系统编码。在Windows10中,它是cp1252,与utf-8不同。我在py 3.8中使用codecs.open()时浪费了几个小时,这是正确的答案
my_str = "\u221a25"
print(my_str)
>>> √25
city = 'Ribeir\xc3\xa3o Preto'
print city.decode('cp1252').encode('utf-8')
>>> C = 'ñ'
>>> U = C.decode('utf8')
>>> U
u'\xf1'
>>> ord(U)
241
>>> unichr(241)
u'\xf1'
>>> print unichr(241).encode('utf8')
ñ
# -*- coding: utf-8 -*-