我目前正在使用现有的代码库。该项目需要postgres作为后端,它可以正常运行。基本上,项目需要从ISO-8859-1编码文件中读取并将内容发布到数据库。数据库的编码设置:
cs_db=> show server_encoding;
server_encoding
-----------------
UTF8
(1 row)
cs_db=> show client_encoding;
client_encoding
-----------------
UTF8
(1 row)
这是项目打印的日志:
2016-12-19 09:17:16 - cs - INFO - SET client_encoding='LATIN1'
该项目是用Python 2.7编写的。从文件中读取时,它使用原始方式 - 二进制格式:
with read(filepath, 'rb') as infile:
for line in infile:
process_line(line)
我只是对此感到困惑 - 根据我的理解,这个程序应该会中断,但不会出现以下记录:
cs_db=> select * from cs.tbl where "KEY" = 102023;
rec_id_ | rec_tm_ | KEY | OFID | OFCD | OFNM | del_tm_ | old_id_ | new_id_
---------+---------------------+--------+--------+------+-----------------------------------------+---------+---------+---------
158012 | 2016-04-09 10:41:20 | 102023 | 117354 | CB | Mr. David Charles Brink M.Sc., D.Com. | | |
158013 | 2016-04-09 10:41:20 | 102023 | 534788 | CE | Mr. Karel Johan Grové AMP | | |
158014 | 2016-04-09 10:41:20 | 102023 | 534794 | CF | Mr. Philip Dieperink BCom (Hons), CTA, | | |
(3 rows)
因此,上面选择的第二条记录包含一些非ascii字符。但是数据库很乐意存储并选择记录。
所以我的猜测是postgres为我编码转换。但我不确定。我以为我必须将客户端编码设置为UTF-8才能使其正常工作?
编辑: 这是正确的链接吗? postgres doc。感谢