Ich möchte Videofileclip() verwenden, aber ein UnicodeDecodeError auftritt. Die Videofiles enthalten japanische Kanji oder Sonderzeichen.Sonderzeichen/Kanji Probleme mit Python Unicode
Mein Beispielcode:
#-*- 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' funktioniert:
>>> a='H:\\kittens.mkv'
>>> clip=VideoFileClip(a)
>>>
aber 'b' nicht funktioniert:
>>> 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
>>>
Ich habe dies versucht, aber es funktioniert auch nicht.
b=b.decode('cp949')
b=b.decode('cp949').encode('utf-8')
b=unicode(b.decode('cp949'))
Ich denke, dass Windows 7 Unicode-Dateinamen unterstützt (in der japanischen Kanji oder Sonderzeichen), aber der Zeichensatz von Python (2.x) (CP949) unterstützt keine Sonderzeichen. Was kann ich für dieses Problem tun?
Ich vermute, es ist nicht Ihr Code, der Unicode nicht unterstützt, sondern das Modul 'movepy'. Ich erinnere mich, dass es einen Trick gibt, um das zu vermeiden, ich werde versuchen, es zu finden. – FunkySayu
danke. Ich warte auf deine Hilfe. – User8392
Es ist möglicherweise nicht dieses spezifische Problem, aber [warum sys.setdefaultencoding Code bricht] (https://anonbadger.wordpress.com/2015/06/16/why-sys-setdefaultencoding-will-break-code/). Es wird nie benötigt und es gibt einen Grund, warum es nicht ohne den 'reload (sys)' Trick aufgerufen werden kann. Entfernen Sie es. Versuchen Sie auch eine Unicode-Zeichenfolge anstelle einer Bytezeichenfolge für den Dateinamen, z. 'U'H: \\" ēī① ".mp4''. Stellen Sie sicher, dass Sie die Quelldatei in Ihrer deklarierten Quellcodierung von UTF-8 speichern. 'b' ist derzeit eine Bytefolge, die in UTF-8 kodiert ist, was in Windows ein unwahrscheinlicher Dateiname ist. –