1

私のpythonソースコードはすべてutf-8でエンコードされており、このコーディングがファイルの先頭で宣言されています。

ただしu、Unicode 文字列の前が欠落している場合があります。

Umlauts = "üöä"

上記は、ASCII 以外の文字を含むバイト文字列であり、これが問題を引き起こします (UnicodeDecodeError)。

pylint を試しましpython -3たが、警告が表示されませんでした。

バイト文字列内の非ASCII文字を自動的に見つける方法を検索します。

私のソース コードは Python 2.6 と Python 2.7 をサポートする必要があります。

次のよく知られたエラーが表示されます。

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 7: ordinal not in range(128)

ところで:この質問はpythonソースコードに関するものであり、ファイルやソケットから読み取った文字列に関するものではありません。

解決

  • Python 2.6+ をサポートする必要があるプロジェクトの場合、使用します__future__.unicode_literals
  • 2.5 をサポートする必要があるプロジェクトの場合、thg435 (モジュール ast) のソリューションを使用します
4

1 に答える 1

2

もちろん、これには python を使用します。

import ast, re

with open("your_script.py") as fp:
    tree = ast.parse(fp.read())

for node in ast.walk(tree):
    if (isinstance(node, ast.Str) 
            and isinstance(node.s, str) 
            and  re.search(r'[\x80-\xFF]', node.s)):
        print 'bad string %r line %d col %d' % (node.s, node.lineno, node.col_offset)

fußこれは、そのままの非ASCII文字とエスケープされた非ASCII文字(および)を区別しないことに注意してくださいfu\xdf

于 2012-09-28T10:34:46.300 に答える