1
我想使用videofileclip(),但会发生UnicodeDecodeError。 视频文件包括日文汉字或特殊字符。使用Python unicode的特殊字符/汉字问题
我的示例代码:
#-*- 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文件名(在日本汉字或特殊字符),但(CP949)字符集的Python(2.X)不支持特殊字符。我能为这个问题做些什么?
我怀疑这不是你的代码不支持unicode,而是模块'moviepy'。我记得有一个技巧可以避免这种情况,我会尽力找到它。 – FunkySayu
谢谢。我在等你的帮助。 – User8392
它可能不是这个特定的问题,但[为什么sys.setdefaultencoding会破坏代码](https://anonbadger.wordpress.com/2015/06/16/why-sys-setdefaultencoding-will-break-code/)。这是从来没有需要的,有一个原因,它不能没有'重新加载(sys)'技巧调用。去掉它。也可以尝试一个Unicode字符串,而不是文件名的字节字符串,例如'u'H:\\“ēī①” .mp4''。确保将源文件保存在UTF-8的声明源编码中。 'b'目前是以UTF-8编码的字节串,这在Windows中是一个不太可能的文件名。 –