连接到路径和文件名中都有重音字符的本地访问文件时出现问题。我是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”,另一次打印完整的文件名,但连接失败,出现以下错误:
Exception 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 ignored
我试图将连接字符串解码回系统编码
^{pr2}$但是我得到了以下错误:
Traceback (most recent call last): File "mwe.py", line 11, in cnxn = pyodbc.connect(dbConStr.encode('mbcs')) UnicodeDecodeError: 'ascii' codec can't decode byte 0xf8 in position 121: ordina l not in range(128)
我也尝试过“cp1252”和“utf-8”,但它给出了相同的错误(只有utf-8中的字符代码不同)。在
更多信息:脚本文件保存为utf-8。 我使用的是64位英语Windows 7,带有挪威语“locales”。在
提前谢谢。在
更新-2019年7月
对于当前版本的pyodbc,这不再是一个问题。以下代码可以正常工作:
(之前的回答-2013年11月)
我无法使用pyodbc让您的测试用例正常工作。我可以正确地组装连接字符串,但是当我尝试连接时,我收到了错误消息
^{bq}$pyodbc似乎试图将连接字符串转换为
'ascii'
,因此0x7F以上的任何字符都是forbudt。在但是,我可以使用pypyodbc使其正常工作:
^{pr2}$输出:
相关问题 更多 >
编程相关推荐