使用Python unicode的特殊字符/汉字问题

时间:2016-09-15 19:44:55

标签: python unicode special-characters moviepy

我想使用videofileclip(),但会发生UnicodeDecodeError。 视频文件包括日文汉字或特殊字符。

我的示例代码:

#-*- coding: utf-8 -*-
import sys  
from moviepy.editor import VideoFileClip

reload(sys)  
sys.setdefaultencoding('utf-8')

a='H:\\kittens.mkv'
clip1=VideoFileClip(a)

b='H:\\“ēī①”.mp4'
clip2=VideoFileClip(b)

if clip1.fps >= clip2.fps:
    os.remove(b)
else:
    os.remove(a)        

'一个'工作正常:

>>> a='H:\\kittens.mkv'
>>> clip=VideoFileClip(a)
>>> 

但是' b'不起作用:

>>> b='H:\\“ēī①”.mp4'
>>> clip=VideoFileClip(b)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\site-packages\moviepy\video\io\VideoFileClip.py", line 5
5, in __init__
    reader = FFMPEG_VideoReader(filename, pix_fmt=pix_fmt)
  File "C:\Python27\lib\site-packages\moviepy\video\io\ffmpeg_reader.py", line 3
2, in __init__
    infos = ffmpeg_parse_infos(filename, print_infos, check_duration)
  File "C:\Python27\lib\site-packages\moviepy\video\io\ffmpeg_reader.py", line 2
70, in ffmpeg_parse_infos
    filename, infos))
UnicodeDecodeError: 'utf8' codec can't decode byte 0xa1 in position 54: invalid
start byte
>>> b
'H:\\\xa1\xb0??\xa8\xe7\xa1\xb1.mp4'
>>> print b
H:\“??①”.mp4
>>> print b.decode('cp949')
H:\“??①”.mp4
>>>

我试过这个,但它也没有用。

b=b.decode('cp949')
b=b.decode('cp949').encode('utf-8')
b=unicode(b.decode('cp949'))

我认为Windows 7支持Unicode文件名(日语汉字或特殊字符),但Python(2.x)(cp949)的字符集不支持特殊字符。我能为这个问题做些什么?

1 个答案:

答案 0 :(得分:0)

以下是使用pywin32扩展程序的解决方法。 基本上,您使用GetShortPathName函数从unicode路径生成遗留8.3 filename

-