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

标签 python windows-7 unicode batch-file python-unicode

我这里有一个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)

来源:我的 super 用户帖子中的答案,'How do I open a random file in a folder, and set that only files with the specified filename extension(s) should be opened? '

这由 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
文件名、目录名或卷标语法不正确。

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

编辑:我了解到上述命令行错误消息是由于 saving the BAT file as 'UTF-8 with BOM' 。将其另存为“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”。在命令行日志中。

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

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

最佳答案

只需在任何地方使用 Unicode 文字,例如 u".mp4"。如果您给 Python 中的 IO 函数提供 Unicode 输入,它们将返回 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,))

如果您想模拟网络浏览器打开视频文件的方式,那么您可以使用 webbrowser.open() 而不是 os.startfile(),尽管前者可能无论如何,在 Windows 内部使用后者。

关于python - 如何允许打开文件名中包含 Unicode 字符的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14031780/

相关文章:

node.js - Windows 7 上的 Node 故障

java - 无法使用 Java PreparedStatement 在 MySQL 中存储 UTF-8 内容

php - 如何在 php 中显示 mySQL 表中的 Unicode 文本?

python - 如何使用 pandas 创建一个列来标识直到另一列中下一次出现某个值为止的行数?

python - 如何叠加 Pandas 图、matplotlib 图和轴

c# - Windows 手机 xml 解析

r - R中的unicode字符转换

python - 如何通过在输入中输入内容来显示程序的结果?

python - 实例化对象自动添加到 SQLAlchemy session 。为什么?

c# - 在 C# 中使用 SendKeys 发送 ctrl-space?