3

あなたが「特殊」文字と呼ぶと思われるものを含む文字列があり (その上にウムラウトが付いている o)、使用している DBF ライブラリから外れています (Ethan Furman の Python DBF ライブラリhttps://pypi.python.org /pypi/dbf retrieve_character()関数、関数の最後の行のエラーは 'ascii' codec can't decode byte 0xf6 in position 6: ordinal not in range(128)) です。

コード:

def retrieve_character(bytes, fielddef, memo, decoder):
    """
    Returns the string in bytes as fielddef[CLASS] or fielddef[EMPTY]
    """
    data = bytes.tostring()
    if not data.strip():
        cls = fielddef[EMPTY]
        if cls is NoneType:
            return None
        return cls(data)
    if fielddef[FLAGS] & BINARY:
        return data
    return fielddef[CLASS](decoder(data)[0]) #error on this line
4

3 に答える 3

4

dbf ファイルには codepage 属性があります。ファイルで正しく設定されていないようです。データの作成に使用されたコード ページを知っていますか? その場合、ファイルを開くときに dbf の設定をオーバーライドできます。

table = dbf.Table('dbf_file', codepage='cp437')

cp437は単なる例です。適切なものを使用してください。

dbf ファイルの現在のコードページを表示するには (開いたときにオーバーライドしていないと仮定します)、次を使用します。

table.codepage

ファイルを開くときに間違ったコードページを指定すると、ASCII 以外のデータが正しくない可能性があります (たとえば、ウムラウト付きの o がチルダ付きの n になる可能性があります)。

于 2013-09-04T16:05:42.557 に答える
0

使ってみましたunicodeData.encode('ascii', 'ignore')か?oこれにより、エンコード形式間の変換エラーを無視して、ウムラウトが に変換されます。

于 2013-09-04T15:50:09.047 に答える