首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从使用Python2编码的Python3文件中检索UTF8编码(从unicode)字符串的正确值?

如何从使用Python2编码的Python3文件中检索UTF8编码(从unicode)字符串的正确值?
EN

Stack Overflow用户
提问于 2019-04-12 20:48:58
回答 1查看 31关注 0票数 0

我正在将我的应用程序从Python2迁移到Python3。该应用程序将配置保存到一个文件中,其中一个属性在保存之前被编码为utf-8。

例如:username=‘str’保存为'\xe1\x9a\xa0\xe1\x9b....x9a\xb1‘(转换后的数据类型为ᚠᛇᚻ᛫ᛒᛦᚦ᛫ᚠᚱᚩᚠᚢᚱ)

由于此配置文件将在迁移过程中保留,因此当我尝试检索用户名时,我无法像在python3中那样将其解码回unicode,因为str对象没有属性decode。理想情况下,文件中的保存值应该被视为字节,但由于python2不这样做,因此会产生问题。

我不能将它转换成字节对象,因为它改变了整个字符串,尝试了相同的方法。

无法更改当前应用程序代码,因为它已在生产中。

我试着在字符串之前手动附加b‘,这样就行了。但那只是个小技巧。我试过ast.literal_eval,但还是不起作用。

伪代码目前在Python2上运行良好(在迁移到python3之前):

代码语言:javascript
复制
1. To save value in text file:
fp=open(filename,'w')
encoded_name=name.encode('utf-8')
fp.write(encoded_name)
fp.close()

2. To retrieve:
fp.open(filename, 'r') #or rb
encoded_name=fp.read()
fp.close()
return encoded_name.decode('utf-8) 

预期结果:应将从配置文件中检索到的用户名视为字节,而不是字符串。

EN

回答 1

Stack Overflow用户

发布于 2019-04-12 21:15:42

如果您使用

代码语言:javascript
复制
fp.open(filename, 'r')

那么你不需要decode任何东西,它已经是unicode字符串了。

但是如果你使用

代码语言:javascript
复制
    fp.open(filename, 'rb')

应该用encoded_name.decode('utf-8')解码

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55651990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档