パス変数のエンコードとSQLiteデータベースへの挿入に問題があります。役に立たなかったencode( "utf-8")関数でそれを解決しようとしました。次に、タイプunicodeを与えるunicode()関数を使用しました。
print type(path) # <type 'unicode'>
path = path.replace("one", "two") # <type 'str'>
path = path.encode("utf-8") # <type 'str'> strange
path = unicode(path) # <type 'unicode'>
最終的にUnicodeタイプを取得しましたが、パス変数のタイプがstrの場合と同じエラーが発生します。
sqlite3.ProgrammingError:8ビットバイトストリングを解釈できるtext_factory(text_factory = strなど)を使用しない限り、8ビットバイトストリングを使用しないでください。代わりに、アプリケーションをUnicode文字列に切り替えることを強くお勧めします。
このエラーを解決しencode("utf-8")
、unicode()
機能の正しい使用法を説明するのを手伝ってもらえますか?私はよくそれと戦っています。
編集:
このexecute()ステートメントはエラーを引き起こしました:
cur.execute("update docs set path = :fullFilePath where path = :path", locals())
同じ問題を抱えているfullFilePath変数のエンコーディングを変更するのを忘れましたが、今はかなり混乱しています。unicode()またはencode( "utf-8")、あるいはその両方のみを使用する必要がありますか?
使えない
fullFilePath = unicode(fullFilePath.encode("utf-8"))
このエラーが発生するため:
UnicodeDecodeError: 'ascii'コーデックは32桁目のバイト0xc5をデコードできません:序数がrange(128)にありません
Pythonのバージョンは2.7.2です