2017-06-03 64 views
-1

我有保存重音字母的问题。我使用PostgreSQL和Python 2.7Python:UnicodeDecodeError:'utf8'

POSTGRESQL - ENCODING = 'LATIN1' 

我已经加入这一行,但不工作!

#!/usr/bin/python 
# -*- coding: UTF-8 -*- 

更多的错误信息:

UnicodeDecodeError: 'utf8' codec can't decode byte 0xed 

请,任何想法如何解决呢?

@Edit:

cur = conn.cursor() 
cur.execute("SELECT * FROM users") 
rows = cur.fetchall() 


obj_list = list() 
for row in rows: 
ob = dict() 
ob['ID'] = row[0] 
ob['NAME'] = row[1] 
ob['CITY'] = row[2] 
ob['USERNAME'] = row[3] 

obj_list.append(ob) 

# print obj_list 
# sys.exit() 
def add_object(ob, row): 
ws.cell(column=3, row=row).value = ob['ID'] 
ws.cell(column=4, row=row).value = ob['NAME'] 
ws.cell(column=6, row=row).value = ob['CITY'] 
ws.cell(column=8, row=row).value = ob['USERNANE'] 

的代码这部分是触发错误。它返回口音..

ob['CITY'] = row[2]  
+2

如何向我们展示导致异常的程序部分?请说明你如何打开你的文件/流,以及你如何读写它们。 –

+0

你是什么意思的“它是重音”?该声明是一项你认为会引发例外的任务。作业不返回任何内容。引发异常的语句不能返回任何内容。 – Goyo

+0

急性口音,单词“é”,“há”就是例子,那种人物正在返回 – TMoraes

回答

1

检查的第一件事是你的“重音字母”是否属于LATIN1集 - 例如,做,但S不。如果不是的话,你真的应该在PostgreSQL中使用UTF8编码(反正它可能更安全)。

+1

对不起,但我该怎么做呢? – TMoraes

+0

我无法修改任何有关PostgreSQL的信息。 – TMoraes

+1

啊,所以你已经在你的Postgres数据库中有了LATIN1,但是你还没有告诉Python是LATIN1,所以Python使用了UTF-8。在'cur.execute'之前调用'conn.set_client_encoding('LATIN1')'并且它应该正确解码。 –