【发布时间】:2020-02-29 20:44:30
【问题描述】:
我在 Ubuntu 机器上通过 VLC 播放器下载塞尔维亚语/波斯尼亚语/克罗地亚语字幕,并且必须不断手动将 æ、è 和 ð 等字符更改为 ć、č 和 đ 以便播放器正确渲染.我想制作一个可以为我做这件事的python3函数,但是我很想理解字符串编码和解码。
通过chardata.detect发现VLC播放器下载的.srt文件的编码是Windows-1252。所以现在,我做这样的事情:
import codecs
f = codecs.open('my_file.srt', 'r', encoding='Windows-1252')
data = f.read()
data_utf8 = data.encode('utf-8')
f.close()
问题是,当我将data 变量的内容打印到终端时,我可能会得到这样的片段:
obožavam vaše。
但是,当我将data-utf8 变量的内容打印到终端时,同一个片段现在看起来像这样:
obo\xc5\xbeavam va\xc5\xa1e。
这不是我所期望的。
此外,当我现在想将此数据保存到文件时
with open('my_utf8_file.srt', 'w') as f:
f.write(data_utf8)
我收到TypeError: write() argument must be str, not bytes。
谁能告诉我我做错了什么?
【问题讨论】:
-
可能检测到的编码不正确,它并不总是有效。对于克罗地亚语,推荐的编码是东欧,而不是西欧。你可以试试 windows-1250 而不是 1252 吗?
-
我用仅包含 obožavam vaše 的文件尝试了您的代码,该文件以 windows-1252 或 1250 编码,并且在这两种情况下都有效...您能提供字幕文件以便我尝试吗?
-
你能分享
srt的链接吗?也许您应该尝试使用Universal Encoding Detector 库。 -
data.encode('utf-8').decode(),然后尝试写。 -
已经尝试了大部分这些东西,但结果我只是在写入文件时忘记使用二进制标志,因为 mousetail 在下面注意到。无论如何,谢谢你们!
标签: python ubuntu-18.04 vlc codec