如何在Python 3中将字符串转换为unicode / byte字符串?

时间:2016-08-12 01:49:15

标签: python python-3.x unicode encode codec

我知道这有效:

a = u"\u65b9\u6cd5\uff0c\u5220\u9664\u5b58\u50a8\u5728"
print(a) # 方法,删除存储在

但是,如果我有一个来自JSON文件的字符串,它不以" u"(a = "\u65b9\u6cd5\uff0c\u5220\u9664\u5b58\u50a8\u5728")开头,我知道如何在Python 2中创建它(print unicode(a, encoding='unicode_escape') # Prints 方法,删除存储在) 。但是如何用Python 3做呢?

同样,如果它是从文件加载的字节字符串,如何转换它?

print("好的".encode("utf-8"))  # b'\xe5\xa5\xbd\xe7\x9a\x84'
# how to convert this?
b = '\xe5\xa5\xbd\xe7\x9a\x84'  # 好的

1 个答案:

答案 0 :(得分:3)

如果我理解正确,该文件包含文字文本\u65b9\u6cd5\uff0c\u5220\u9664\u5b58\u50a8\u5728(所以它是纯ASCII,但是使用反斜杠和所有描述Unicode序列的方法与在Python str文字中的方式相同) 。如果是这样,有两种方法可以解决这个问题:

  1. 以二进制模式阅读文件,然后致电mystr = mybytes.decode('unicode-escape')以从bytes转换为str解释转义
  2. 以文本模式读取文件,并使用codecs模块进行“text - > text”转换(字节到字节,文本到文本编解码器现在仅由codecs模块支持函数; bytes.decode纯粹用于字节到文本,而str.encode纯粹用于文本到字节,因为通常在Py2中,str.encodeunicode.decode是一个错误,并删除危险的方法可以更容易地理解转换的方向,例如decodedstr = codecs.decode(encodedstr, 'unicode-escape')