1

私のプロジェクトでは、すべてが Unicode でなければなりません。すべてを処理する私の方法は次のとおりです。すべての文字列がこの関数に渡されます。

def unicodify(string):
    if not isinstance(string, unicode):
        return string.decode('utf8', errors='ignore')
    return string

次の方法は、製品コードの良い方法ですか? そうでない場合、ユニコードへのデコードを提案する理由と方法を教えてください。errors='ignore' は、実際には ValueErrors 'invalid \x escape' に対して機能しませんが、それを適切に処理する方法がわかりません。

ありがとう

4

2 に答える 2

1

無効な文字列リテラルがある可能性があります。

\x2つAの16 進数値 (数字、、、、、、、、、、、、、、、)が続く必要BCあります。DEFabcdef

有効な例:

>>> '\xA9'
'\xa9'
>>> '\x00'
'\x00'
>>> '\xfF'
'\xff'

無効な例:

>>> '\xOO'
ValueError: invalid \x escape
>>> '\xl3'
ValueError: invalid \x escape
>>> '\x5'
ValueError: invalid \x escape

文字列リテラルを参照してください。

于 2013-09-13T07:54:44.037 に答える
0

str 型を unicode 型に変換しようとする場合でも、str 内のデータのエンコーディングを知る必要があります。utf8 は一般的ですが、唯一のエンコーディングではありません。

さらに、エンコーディングされていない str データを取得することもできます (任意のバイナリ データなど)。その場合はユニコードに変換できません。むしろ、2 つのオプションがあります。a) 例外を発生させるか、b) できる限り変換してエラーを無視します。何をすべきかは、アプリケーションによって異なります。

于 2014-02-20T23:39:12.970 に答える