ディレクトリにファイルのリストを作成する PHP スクリプトがありますが、PHP は英語のファイル名しか認識できず、ロシア語やアジア言語などの他の言語のファイル名を完全に無視します。
多くの努力の後、私は自分のために働くことができる唯一の解決策を見つけました-ファイルの名前をUTF8に変更するPythonスクリプトを使用して、その後PHPスクリプトがそれらを処理できるようにします。
(PHP がファイルの処理を終了した後、ファイルの名前を英語に変更します。UTF8 では保持しません)。
次の python スクリプトを使用しました。これは正常に動作します。
import sys
import os
import glob
import ntpath
from random import randint
for infile in glob.glob( os.path.join('C:\\MyFiles', u'*') ):
if os.path.isfile(infile):
infile_utf8 = infile.encode('utf8')
os.rename(infile, infile_utf8)
問題は、すでに UTF8 になっているファイル名も変換することです。ファイル名が既に UTF8 である場合に備えて、変換をスキップする方法が必要です。
私はこのpythonスクリプトを試していました:
for infile in glob.glob( os.path.join('C:\\MyFiles', u'*') ):
if os.path.isfile(infile):
try:
infile.decode('UTF-8', 'strict')
except UnicodeDecodeError:
infile_utf8 = infile.encode('utf8')
os.rename(infile, infile_utf8)
ただし、ファイル名が既に utf8 の場合、致命的なエラーが発生します。
UnicodeDecodeError: 'ascii' codec can't decode characters in position 18-20
ordinal not in range(128)
別の方法も試しましたが、うまくいきませんでした:
for infile in glob.glob( os.path.join('C:\\MyFiles', u'*') ):
if os.path.isfile(infile):
try:
tmpstr = str(infile)
except UnicodeDecodeError:
infile_utf8 = infile.encode('utf8')
os.rename(infile, infile_utf8)
以前とまったく同じエラーが発生しました。
何か案は?
Python は私にとって非常に新しいものであり、単純なスクリプトでさえデバッグするのは大変な作業です。そのため、明示的な回答 (つまりコード) を書いてください。私には、うまくいくかどうかわからない一般的なアイデアをテストする能力がありません。ありがとう。
ファイル名の例:
hello.txt
你好.txt
안녕하세요.html
chào.doc