首页 > 解决方案 > 这个字符串的编码是什么?

问题描述

我想转换这个字符串

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

在 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'

这似乎没有帮助。

服务器和本地计算机中的数据似乎相同,但我不知道为什么它以不同的格式显示结果。有没有办法将我的字符串转换为正确的格式?

标签: pythonutf-8server

解决方案


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

>>> s = 'Ἰσπανίας Βαιτικῆς θέσις'

>>> print(s)
Ἰσπανίας Βαιτικῆς θέσις

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

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

更好的解决方案是找到发生这种编码选择的设置并将其更改为正确的 UTF-8 编码。奇怪的是,您要么自己打开文件,在其中可以传递编码,要么使用更高级别的阅读器,它应该再次接受编码。

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

>>> broken = 'Ἰσπανίας Βαιτικῆς θέσις'

>>> print(broken)
Ἰσπανίας Βαιτικῆς θέσις

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

推荐阅读