1. ホーム
  2. python

[解決済み] Pythonのunicode()とencode()関数の使用法

2022-03-01 04:40:19

質問

のエンコーディングに問題があります。 パス 変数に挿入し、それを SQLite データベースを使用しています。で解決しようとしました。 エンコード("utf-8") 関数がありますが、これは役に立ちませんでした。そこで 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ビットのバイト列は、以下の場合を除き、使用してはいけません。 のように)8ビットのバイト列を解釈できるtext_factoryを使用します。 text_factory = str)。その代わりに、以下のようにすることを強くお勧めします。 アプリケーションをユニコード文字列に切り替えてください。

このエラーを解決し、また encode("utf-8")unicode() 関数を使用することができますか?とよく喧嘩しています。

EDIT

これは execute() ステートメントがエラーを発生させました。

cur.execute("update docs set path = :fullFilePath where path = :path", locals())

のエンコードを変更するのを忘れていました。 fullFilePath という変数がありますが、これも同じ問題で、今、かなり混乱しています。を使うべきでしょうか? unicode() または エンコード("utf-8") それとも両方?

を使うことはできません。

fullFilePath = unicode(fullFilePath.encode("utf-8"))

というエラーが発生するからです。

UnicodeDecodeError: 'ascii' コーデックは、バイト 0xc5 in position をデコードできません。 32: 序数が範囲(128)内ではない

Python バージョンは 2.7.2

解決方法は?

を使用しています。 encode("utf-8") が正しくありません。 Pythonのバイト列( str 型) にはエンコーディングがありますが、Unicode にはありません。 Unicode の文字列を Python のバイト文字列に変換するには uni.encode(encoding) また、バイト文字列をユニコード文字列に変換するには s.decode(encoding) (または同等に unicode(s, encoding) ).

もし fullFilePathpath は現在 str の型がある場合、それらがどのようにエンコードされているかを把握する必要があります。 例えば、現在のエンコーディングがutf-8であれば、次のようになります。

path = path.decode('utf-8')
fullFilePath = fullFilePath.decode('utf-8')

これでも直らない場合は、実際の問題は、Unicode文字列を execute() の呼び出しは、以下のように変更してみてください。

cur.execute(u"update docs set path = :fullFilePath where path = :path", locals())