Web.py - Unicode:解码(" utf-8")给出错误

时间:2016-03-23 09:50:03

标签: python unicode encoding utf-8

def search(str):
    cnx = mysql.connector.connect(user='arda', password='1', database='worddb')
    cursor = cnx.cursor()
    sqlq = "SELECT COUNT(1) FROM names WHERE name = '%s'" %str
    cursor.execute(sqlq)
    if cursor.fetchone()[0]:
        return str + " " + "name"
    else:
        return str + " " + "not name"

当我搜索Ömür时,它会给我输出= ömür

  1. 我宣布# - - 编码:utf-8 - -
  2. 2 - 尝试str.decode("utf-8")

    3 - 我也用utf -8

    创建了我的数据库

    当我尝试str.decode时,它给了我ascii错误:

    'ascii' codec can't encode character u'\xf6' in position 0: ordinal not in range(128)
    

    我的代码出了什么问题?

1 个答案:

答案 0 :(得分:0)

数据库的响应已经是Unicode。我们必须假设Web.py在响应时将其编码为UTF-8。

因此,您需要添加一个Content-Type标头,并将charset设置为utf-8,以便浏览器知道该网页的编码。

E.g。

web.header('Content-Type','text/html; charset=utf-8', unique=True)

完整示例:

def search(str):
    web.header('Content-Type','text/html; charset=utf-8', unique=True) 
    cnx = mysql.connector.connect(user='arda', password='1', database='worddb')
    cursor = cnx.cursor()
    sqlq = "SELECT COUNT(1) FROM names WHERE name = '%s'" %str
    cursor.execute(sqlq)
    if cursor.fetchone()[0]:
        return str + " " + "name"
    else:
        return str + " " + "not name"