如何从Python3中使用Python2编码的文件中检索UTF-8编码(来自unicode)字符串的正确值?

问题描述 投票:0回答:1

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

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

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

我无法将其转换为字节对象,因为它会更改整个字符串,尝试相同。

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

我尝试在字符串之前手动附加b',这就是诀窍。但这是一个黑客。尝试了ast.literal_eval,但又一次没有用。

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

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) 

预期结果:从配置文件中检索的用户名应被视为字节而不是str。

python python-3.x python-2.7 unicode python-unicode
1个回答
0
投票

如果你使用

fp.open(filename, 'r')

然后你不需要decode任何东西,它已经是一个unicode字符串。

但如果你使用

    fp.open(filename, 'rb')

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

© www.soinside.com 2019 - 2024. All rights reserved.