パス変数のエンコードと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'>
最後にユニコード型を取得しましたが、パス変数の型が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 をデコードできません: 序数が範囲外です (128)
Pythonのバージョンは2.7.2です