簡體   English   中英

SQLite3-不能在變音符號中使用字符

[英]Sqlite3 - can't use characters with diacritics

我正在創建一個將名稱作為參數並從Sqlite3數據庫返回一行的Sqlite3 嘗試使用非變音符時,它可以工作。

但是,如果我試圖傳遞一個string其中包含變音字符,它提出:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 4: ordinal not in range(128)

當我嘗試在控制台上打印相同的名稱時,它可以工作。

 # -*- coding: utf-8 -*-
import sqlite3

conn = sqlite3.connect('data.db')
cur = conn.cursor()

def get_subject_by_name(name): # TODO: APROXIMATE SEARCH
    result = cur.execute("""SELECT nazov,ICO,pravna_forma,sidlo,predmet_cinnosti,den_zapisu,url_orsr FROM companies WHERE nazov LIKE ?""",('{}%'.format(name),)).fetchall()
    print result

get_subject_by_name(u"systém")

您知道問題可能在哪里嗎?

它來自您的format

Python 2.7.5 (default, May 15 2013, 22:44:16) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> '{}%'.format(u'syst\xe9m')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 4: ordinal not in range(128)

您正在嘗試將Unicode字符串格式化為字節字符串,而Python 2則嘗試使用默認的ascii編解碼器將Unicode字符串強制轉換為字節字符串。

隨處使用Unicode字符串:

>>> u'{}%'.format(u'syst\xe9m')
u'syst\xe9m%'

包括您的SELECT:

result = cur.execute(u"""SELECT nazov,ICO,pravna_forma,sidlo,predmet_cinnosti,den_zapisu,url_orsr FROM companies WHERE nazov LIKE ?""",(u'{}%'.format(name),)).fetchall()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM