问题描述
如何用规范化的词替换 srt 文件中的变音符号?
我有一个罗马尼亚语 srt,我正在尝试使用 jellyfin 流式传输电影,但我遇到了一个问题,该应用程序不支持 ĂăÂâÎîȘșȚț
等特殊字符,因此我试图摆脱它们。
我尝试使用 unidecode 但这些词奇怪地被替换为 ț
-> th
,ș
-> o
'我也试过只使用 sed 来替换字符,但一些像 ș
这样的字符显示为 º
因此以下函数不会替换它们:
def strip_accents(s):
d = 'ĂăÂâÎîȘșȚț'
n = 'AaAaIisstt'
dl = [i for i in d]
nl = [i for i in n]
ii = 0
for x in dl:
s = re.sub(x,nl[ii],s)
ii += 1
return s
解决方法
对于字幕,先用记事本打开,然后用另存为,在这一步Encoding:UTF-8
再保存
您可以将此代码用于列表:
import re
def strip_accents():
d = 'ĂăÂâÎîȘșȚț'
n = 'AaAaIiSsTt'
dl = [i for i in d]
# print(dl)
nl = [i for i in n]
# print(nl)
new_list = []
i =0
for string in dl:
new_string = string. replace(dl[i],nl[i])
new_list. append(new_string)
# print(new_strings)
i +=1
return new_list
print(strip_accents())
,
所以,多亏了一个 github 托管的 repo,我找到了一种方法来做我想做的事。我只是用正确的变音符号 º,
ª
将奇怪的字符替换为 ș
Ș
,一切都按我想要的方式工作。我不需要替换变音符号来使字幕工作。
https://github.com/pckltr/corecteaza-subtitrari/
Python 代码:
def fix_accents(s):
char_dict = { "º": "ș","ª": "Ș","ş": "ș","Ş": "Ș","ţ": "ț","Ţ": "Ț","þ": "ț","Þ": "Ț","ã": "ă" }
for k,v in char_dict.items():
s = s.replace(k,v)
return s