1
videofileclip()を使用したいが、UnicodeDecodeErrorが発生する。 ビデオファイルには、日本語の漢字や特殊文字が含まれています。Pythonのユニコードを使用した特殊文字/漢字の問題
私のコード例:
#-*- 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)の文字セットは特殊文字をサポートしていないと思います。この問題のために私は何ができますか?
私はそれがユニコードをサポートしていないコードではなく、「moviepy」モジュールであると思われます。私はこれを避けるためのトリックがあることを覚えています、私はそれを見つけることを試みます。ありがとう。 – FunkySayu
ありがとう。私はあなたの助けを待っています。 – User8392
この特定の問題ではないかもしれませんが、なぜ[sys.setdefaultencodingはコードを破りますか](https://anonbadger.wordpress.com/2015/06/16/why-sys-setdefaultencoding-will-break-code/)。それは決して必要ではなく、 'reload(sys)'トリックなしでは呼び出すことができない理由があります。それを除く。また、ファイル名のバイト文字列の代わりにUnicode文字列を試してください。 'u'H:\\"ēī① ".mp4"です。宣言されたUTF-8ソースコードにソースファイルを保存してください。 'b'は現在、UTF-8でエンコードされたバイト文字列です。これはWindowsではほとんどありません。 –