我想转换这个字符串
Ἰσπανίας Βαιτικῆς θέσιÏ
在 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'))
Ἰσπανίας Βαιτικῆς θέσις
