パスとファイル名の両方にアクセント付きの文字が含まれているローカル Access ファイルに接続する際に問題があります。私はPythonを初めて使用するので、これまでに管理したものは次のとおりです。
# coding=utf-8
from __future__ import absolute_import, division, print_function, unicode_literals
import os
import pyodbc
scriptDir = os.path.dirname(os.path.realpath(__file__)).decode('mbcs')
dbRelPath = "MøreCase_v2.accdb"
dbAbsPath = scriptDir + '\\' + dbRelPath
print (os.path.exists(dbAbsPath))
dbConStr = "DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" + dbAbsPath
print (dbConStr)
cnxn = pyodbc.connect(dbConStr)
最初の出力では「True」が返され、もう 1 つは完全なファイル名が出力されますが、接続は次のエラーで失敗します。
例外 UnicodeEncodeError: UnicodeEncodeError('ascii', u'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\Users\xxx\case\M\xf8re\M\xf8reCase_v2.accdb', 121, 122, 'ordinal not in range(128)') in 無視
接続文字列をデコードしてシステムエンコーディングに戻そうとしました
cnxn = pyodbc.connect(dbConStr.encode('mbcs'))
しかし、代わりに次のエラーが表示されます。
トレースバック (最後の最後の呼び出し): ファイル "mwe.py"、11 行目、cnxn = pyodbc.connect(dbConStr.encode('mbcs')) で UnicodeDecodeError: 'ascii' コーデックは位置 121 のバイト 0xf8 をデコードできません: ordina l not in range(128)
「cp1252」と「utf-8」も試しましたが、同じエラーが発生します(utf-8では文字コードのみが異なります)。
詳細: スクリプト ファイルは utf-8 として保存されます。ノルウェー語の「ロケール」を使用した 64 ビットの英語版 Windows 7 を使用しています。
前もって感謝します。