繁体   English   中英

如何允许打开文件名中包含Unicode字符的文件?

[英]How do I allow opening of files that have Unicode characters in their filenames?

我这里有这个Python脚本,运行时会在目录中打开一个随机视频文件:

import glob,random,os  
files = glob.glob("*.mkv")  
files.extend(glob.glob("*.mp4"))  
files.extend(glob.glob("*.tp"))  
files.extend(glob.glob("*.avi"))  
files.extend(glob.glob("*.ts"))  
files.extend(glob.glob("*.flv"))  
files.extend(glob.glob("*.mov"))  
file = random.choice(files)  
print "Opening file %s..." % file  
cmd = "rundll32 url.dll,FileProtocolHandler \"" + file + "\""  
os.system(cmd)

来源:我的超级用户帖子中的回答:“ 如何打开文件夹中的随机文件,并设置仅打开具有指定文件扩展名的文件?

这由BAT文件调用,其脚本如下:

C:\Python27\python.exe "C:\Programs\Scripts\open-random-video.py" cd   

我将此BAT文件放在要打开随机视频的目录中。

在大多数情况下,它工作正常。 但是,我无法使其打开文件名中带有Unicode字符(如我的情况下为日文或韩文字符)的文件。

这是在目录上运行BAT文件和Python脚本并打开文件名中包含Unicode字符的文件时的错误消息:

C:\\TestDir>openrandomvideo.BAT

C:\\TestDir>C:\\Python27\\python.exe "C:\\Programs\\Scripts\\open-random-video.py" cd
The filename, directory name, or volume label syntax is incorrect.

请注意,该日志中的.FLV视频文件的文件名从其原始文件名(소시.flv)更改为命令行日志中的“∩╗┐”。

编辑:我了解到上述命令行错误消息是由于将BAT文件另存为'带有BOM的UTF-8'所致。 将其另存为“ ANSI或UTF-16”会显示以下消息,但仍不会打开文件:

C:\TestDir>openrandomvideo.BAT

C:\TestDir>C:\Python27\python.exe "C:\Programs\Scripts\open-random-video.py" cd
Opening file ??.flv...

现在,该日志中的.FLV视频文件的文件名从其原始文件名(소시.flv)更改为“ ??。flv”。 在命令行日志中。

我在Windows 7(64位)上使用Python 2.7。

如何允许打开文件名中包含Unicode字符的文件?

只需在各处使用Unicode文字,例如u".mp4" 如果您给它们提供Unicode输入,则Python中的IO函数将返回Unicode文件名(内部它们可能使用支持Unicode的Windows API):

import os
import random

videodir = u"." # get videos from current directory
extensions = tuple(u".mkv .mp4 .tp .avi .ts .flv .mov".split())
files = [file for file in os.listdir(videodir) if file.endswith(extensions)]
if files: # at least one video file exists
    random_file = random.choice(files)
    os.startfile(os.path.join(videodir, random_file)) # start the video
else:
    print('No %s files found in "%s"' % ("|".join(extensions), videodir,))

如果要模拟Web浏览器如何打开视频文件,则可以使用webbrowser.open()而不是os.startfile()尽管前者可能会在Windows上内部使用后者。

运行BAT文件时出错是因为BAT文件本身另存为“带BOM的UTF-8”。 “∩╗┐”字节不是损坏的文件名,它们是存储在BAT文件中的字面第一个字节。 将BAT文件重新保存为ANSI或UTF-16,这是BAT文件唯一支持的编码。

按照JF Sebastian的描述使用Unicode文字,或者使用始终使用Unicode的Python 3。

(对于Python 3,您的脚本将需要稍作修改:print现在是一个函数,因此您必须在参数列表周围加上括号。)

请熟悉一下在源代码中添加# -*- coding: utf-8 -*-

因此python了解您的unicode。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM