我正在使用由Jun Murakami编写的脚本将.srt文件(电影字幕)的编码从ANSI转换为UTF-8,它做得很好,对我来说很完美,但是有问题。我的文件夹名称中包含Unicode字符,脚本不会在这些文件夹中打开.srt文件。我只想让脚本像其他人一样打开这些文件夹。
这是剧本:
import os;
import sys;
filePathSrc="C:\\Users\\New folder\\" # Path to the folder with files to convert
for root, dirs, files in os.walk(filePathSrc):
for fn in files:
if fn[-4:] == '.srt': # Specify type of the files
notepad.open(root + "\\" + fn)
notepad.runMenuCommand("Encoding", "Convert to UTF-8")
notepad.save()
notepad.close()
所以我想知道是否有人可以帮我解决这个问题。特别是Jun Murakami谁首先写了它或任何知道如何解决这个问题的人。我将非常感激。
答案 0 :(得分:0)
您可以尝试以下代码:
import codecs
import os
import sys
filePathSrc="C:\\222\\3" # Path to the folder with files to convert
for root, dirs, files in os.walk(unicode(filePathSrc)):
for fn in files:
if fn[-4:] == '.srt': # Specify type of the files
filename = unicode(root + "\\" + fn)
with codecs.open(filename,'r', encoding = "Windows-1251") as f:
text = f.read()
# process Unicode text
with codecs.open(filename,'w',encoding='utf8') as f:
# f.write(u'\uFEFF') # BOM mark optional
f.write(text)
点数:
import codecs
已添加到使用Python中的文件os.walk(unicode(filePathSrc))
被赋予Unicode路径以返回Unicode文件名Windows-1251
代码中为文件指定正确的编码,而不是with codecs.open(filename,'r', encoding = "Windows-1251")
。filePathSrc
变量应具有Unicode字符,请将其转换为\uXXXX
表示法(您可以使用 JavaScript转义字段中的r12a Unicode Converter轻松完成此操作)。比如说,您的文件夹名称是7 Minutes 2014{جنایی}{7 دقیقه}
。将其粘贴到绿色字段,然后单击转换。然后,从JavaScript转义字段中获取字符串并将其用于filePathSrc
变量,同时还预先挂起具有u""
前缀的字符串。它看起来像filePathSrc=u"c:\\222\\7 Minutes 2014{\u062C\u0646\u0627\u06CC\u06CC}{7 \u062F\u0642\u06CC\u0642\u0647}"
。然后,代替os.walk(unicode(filePathSrc))
使用os.walk(filePathSrc)
,因为我们传递的字符串已经是Unicode。答案 1 :(得分:0)
如果在os.walk()
中使用Unicode路径,它将返回Unicode路径和文件名。转换文件不需要记事本。下面的代码将在Python 2和Python 3中使用,因为它没有指定。
请注意,Python 3默认情况下字符串是Unicode,但from __future__
使Python 2字符串成为默认Unicode,通常它们是字节字符串。确保在任何地方使用Unicode字符串都很重要。
io.open
是{3}的Python 3版本,但也可以在Python 2中使用。它默认打开“ANSI”编码的文件。 open
可用于确定确切的编码。它是美国Windows上的locale.getpreferredencoding()
。 cp1252
将返回解码为Unicode的文件数据。
编码read()
将添加UTF-8编码的BOM字符(Windows倾向于喜欢),并使用UTF-8对写入的数据进行编码。如果不需要BOM,请改用utf-8-sig
。
utf8