将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)
我正在 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)