Skip to main content
 首页 » 编程设计

python之这个字符串的编码是什么

2025年05月04日36soundcode

我想转换这个字符串

Ἰσπανίας Βαιτικῆς Î¸á½³ÏƒÎ¹Ï 

在 python 中转换为希腊语:

Ἰσπανίας Βαιτικῆς θέσις  

问题是我有 json 数据,我将其读入一个数据框中,其中的列名包括上面的希腊文本。

当我从云服务器读取它时,它以正确的格式读取:

Ἰσπανίας Βαιτικῆς θέσις  

但是当我从本地计算机在 jupyter lab 中读取时,它是这样读取的:

Ἰσπανίας Βαιτικῆς θέσιÏ. I 

我试过

def utf8(x): 
    return x.encode(encoding="utf-8")  

但这只会给我这个结果:

b'\xe1\xbc\xb8\xcf\x83\xcf\x80\xce\xb1\xce\xbd\xe1\xbd\xb7\xce\xb1\xcf\x82 \xce\x92\xce\xb1\xce\xb9\xcf\x84\xce\xb9\xce\xba\xe1\xbf\x86\xcf\x82 \xce\xb8\xe1\xbd\xb3\xcf\x83\xce\xb9\xcf\x82' 

这似乎没有帮助。

服务器和本地电脑的数据看起来是一样的,但不知道为什么显示的结果格式不一样。有没有办法将我的字符串转换为正确的格式?

请您参考如下方法:

您看到的是 latin1 的 UTF-8 Windows-1252 mojibake :

>>> s = 'Ἰσπανίας Βαιτικῆς θέσις' 
 
>>> print(s) 
Ἰσπανίας Βαιτικῆς θέσις 
 
>>> print(s.encode('utf8').decode('cp1252')) 
Ἰσπανίας Βαιτικῆς θέσις 

这表明虽然您的文件正确编码为 UTF8,但当您将其加载到 jupyterlab 时,它会使用系统 CP-1252 编码进行解码。

更好的解决方案是找到发生这种编码选择的设置,并将其更改为正确的 UTF-8 编码。很可能你是opening自己的文件,您可以在其中传递编码,或者您正在使用更高级别的阅读器,它再次应该采用编码。

但如果以某种方式无法做到这一点,您甚至可以手动反转 mojibake(作为一种解决方法):

>>> broken = 'Ἰσπανίας Βαιτικῆς θέσις' 
 
>>> print(broken) 
Ἰσπανίας Βαιτικῆς θέσις 
 
>>> print(broken.encode('cp1252').decode('utf8')) 
Ἰσπανίας Βαιτικῆς θέσις