将Windows-1252字幕文件转换为utf-8

Convert Windows-1252 subtitle file to utf-8

我正在 Ubuntu 机器上通过 VLC 播放器下载 Serbian/Bosnian/Croatian 字幕,并且经常手动将 æ、è 和 ð 等字符更改为 ć、č 和 đ,以便播放器可以正确渲染它们。我想制作一个可以为我做的 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

谁能告诉我我做错了什么?

尝试使用 chardet 来确定正确的文件编码。
打开命令行并键入:

> chardetect Joker.BDRip.x264-AAA.cyr.srt
Joker.BDRip.x264-AAA.cyr.srt: windows-1251 with confidence 0.8720288218241439

> chardetect Joker.BDRip.x264-AAA.cyr_utf8.srt
Joker.BDRip.x264-AAA.cyr_utf8.srt: utf-8 with confidence 0.99

安装:

pip install chardet

我用这个Serbian subtitles来测试。

你必须使用:

with open('my_utf8_file.srt', 'wb') as f:
    f.write(data_utf8)

注意 'b',这会将文件标记为二进制文件,因此您可以写入字节(如 .encode() 打印的那样)这也是它打印不同的原因。

或者,您可以执行以下操作:

with open('my_utf8_file.srt', 'w', encoding='utf-8') as f:
    f.write(data)