想请教怎么转 码

2017-01-07 20:37:54 +08:00
 ericbize
#-*-coding:utf-8-*-
import MySQLdb
import sys
import os

reload(sys)
sys.setdefaultencoding('utf8')

conn= MySQLdb.connect(
host='.gz.cdb.myqcloud.com',
port = ,
user='',
passwd='',
db ='robot',
charset="utf8"
)
cur = conn.cursor()

entering = raw_input("please enter : ")

entering="'" + entering + "'"

sql = " SELECT REPLY FROM robot.reply where RECEIVE = "

cur.execute(sql+entering)
results = cur.fetchone()

print results

conn.close()


写了一段 py , 按照数据库有的内容输出,可是中文输出的是 unicode 请问怎么转码


<a href="http://imgur.com/jxAdVsS"><img src="" title="source: imgur.com" /></a>
2934 次点击
所在节点    Python
13 条回复
Yinz
2017-01-07 21:01:19 +08:00
cur.execute(sql+entering)
results = cur.fetchone()

print results
改成
cur.execute(sql+entering)
results = cur.fetchone()

for result in results:
print result

Python print 的时候会自动将 unicode str 自动编码为合适的编码。你一开始 print 的是个 tuple 所以没有自动编码
popbones
2017-01-07 21:02:34 +08:00
这个不是编码问题,只是 print 打印嵌在其它结构里的字符串会默认 escape 模式。 shell 的话一般直接打印字符串本身就没事了,如 print result[0]。
qile1
2017-01-08 00:24:25 +08:00
解决了吗?我访问 mssql 也是,不给如果显示我转码 lantin ,然后 utf-8 解码
q397064399
2017-01-08 07:54:15 +08:00
用 python3 吧
ericbize
2017-01-08 09:56:37 +08:00
@Yinz 感谢,解决了 print 中文的话还要加一个 str
for result in results:
print str(result)
ericbize
2017-01-08 09:56:50 +08:00
@popbones 谢谢指教,你的方法也可以。
ericbize
2017-01-08 09:57:02 +08:00
@qile1 mysql 吗? 上面的程序可以解决,数字,中英文输入输出
ericbize
2017-01-08 09:57:07 +08:00
@q397064399 找不到解决方法的时候我也是这样想的,可我只是写一部分,并不能吧别人的部分也让用 3 ~~~
q397064399
2017-01-08 10:55:21 +08:00
@ericbize 所以这就是 python 的悲剧之处,

缺乏静态类型检查 本来就不特别适合协作开发
结果还搞了个 python2.7 python3 不兼容
qile1
2017-01-08 11:21:05 +08:00
@ericbize
抱歉,手机打字好几个错别字。
我使用的是 pymssql 链接的 mssql 数据库,也有乱码。
网上建议是执行的时候先 utf-8 编码下,查询到结果首先编码为 utf-8 ,数据库链接设置编码格式为 utf-8

你试试转码后是否显示乱码。
d=result[0][0].encode(“ latin-1 ”).decode(“ gbk ”)
试试 print d
ericbize
2017-01-08 15:22:59 +08:00
@qile1 SyntaxError: invalid syntax
ubuntu@VM-18-113-ubuntu:~$ python /home/ubuntu/fetch3.py
please enter : hi
h
ubuntu@VM-18-113-ubuntu:~$ python /home/ubuntu/fetch3.py
please enter : 吃饭
Traceback (most recent call last):
File "/home/ubuntu/fetch3.py", line 29, in <module>
d=results[0][0].encode("latin-1").decode("gbk")
UnicodeEncodeError: 'latin-1' codec can't encode character u'\u997f' in position 0: ordinal not in range(256)
ubuntu@VM-18-113-ubuntu:~$ python /home/ubuntu/fetch3.py
please enter : hi
h
ubuntu@VM-18-113-ubuntu:~$ python /home/ubuntu/fetch3.py
please enter : 吃饭
Traceback (most recent call last):
File "/home/ubuntu/fetch3.py", line 29, in <module>
d=results[0][0].encode("latin-1").decode("gbk")
UnicodeEncodeError: 'latin-1' codec can't encode character u'\u997f' in position 0: ordinal not in range(256)



数字,英文都可以,中文不行~~~
ericbize
2017-01-08 15:24:16 +08:00
@q397064399 我也感觉不兼容各种坑~~~ , 但是有时候升级也是变革嘛,就像 intel 新款的 cpu 也不能装 xp
louzhumuyou
2017-01-08 21:41:05 +08:00
@ericbize 我是用 json.dumps 和 json.loads()

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/332933

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX