python - 这个字符串的编码是什么?
问题描述
我想转换这个字符串
Ἰσπανίας Βαιτικῆς θέσιÏ
在 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'
这似乎没有帮助。
服务器和本地计算机中的数据似乎相同,但我不知道为什么它以不同的格式显示结果。有没有办法将我的字符串转换为正确的格式?
解决方案
您看到的是 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'))
Ἰσπανίας Βαιτικῆς θέσις
推荐阅读
- javascript - 使用图像和绘图旋转 Html Canvas
- angular - 如何根据日期属性过滤对象
- macos - mac 和 rhel 之间的键盘映射软件 - 交换控制和命令键
- python - 我的脚本在 Pycharm 中运行非常缓慢
- vba - VBA - 单击 IE 中似乎不是按钮的按钮
- reactjs - React redux 和身份验证
- c++ - 对为什么增量函数实际上不增加变量感到困惑
- sql - Athena 插入新值错误:无关输入“INSERT”期望 {'(', ',', 'SELECT', 'VALUES', 'TABLE'}
- sql - 查找不匹配的 SQL 连接
- c# - 给定来自 System relfection 的 PropertyInfo 对象,我知道它是一个列表,我如何访问该列表并操作列表中的项目?