6

この奇妙な振る舞いを説明してくれる人はいますか? 両方の置換メソッドが機能するか、同時に機能しないことが期待されます。それは私だけですか、それともこれが首尾一貫していると思わない人はいますか?

>>> u'è'.replace("\xe0","")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe0 in position 0: ordinal not in range(128)
>>> re.sub(u'è','\xe0','',flags=re.UNICODE)
''

(u'è'.replace("\xe0","") でエラーが発生する理由の説明を求めているわけではないことに注意してください!)

4

2 に答える 2

2

UnicodeDocから

これらのメソッドの引数は、Unicode文字列または8ビット文字列にすることができます。8ビット文字列は操作を実行する前にUnicodeに変換されます。PythonのデフォルトのASCIIエンコーディングが使用されるため、127より大きい文字は例外を引き起こします

Re Docから:

このモジュールは、Perlで見られるものと同様の正規表現マッチング操作を提供します。検索するパターンと文字列はどちらも、8ビット文字列だけでなくUnicode文字列でもかまいません。

Reモジュールの場合、Unicodeフラグを明示的に指定していないため、変換を試行せず、エラーが発生しません。それが彼らが首尾一貫して行動していない理由です

于 2012-05-07T16:40:22.703 に答える