在Notepad ++中使用Python脚本将ANSI转换为UTF-8 - unicode名称问题

时间:2016-06-22 09:25:32

标签: python unicode utf-8 notepad++ ansi

我正在使用由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谁首先写了它或任何知道如何解决这个问题的人。我将非常感激。

2 个答案:

答案 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