将Windows1252字幕文件转换为utf8

2024-05-18 18:22:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我通过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

谁能告诉我我做错了什么


Tags: 文件终端内容编码datamywindowsopen
2条回答

尝试使用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

我用这个{a2}来测试

您必须使用:

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)

相关问题 更多 >

    热门问题