被编码折腾得想吐了,早上六点一直折腾到现在。真想暴粗口~~~。

2012-05-08 08:13:53 +08:00
 kojp
真心求助!

一直都小心翼翼地用unicode。现在写到数据库里的是unicode

取出来以后还是unicode

u'\u8c37\u6b4c\u4e91\u5b58\u50a8'

直接在终端里面输出,
print u'\u8c37\u6b4c\u4e91\u5b58\u50a8'

谷歌云存储

可以正常显示中文。

在程序里面输出,就是 u'\u8c37\u6b4c\u4e91\u5b58\u50a8'~~~~

啊!!!尼妹的!编码~~~~
6682 次点击
所在节点    Python
37 条回复
magicshui
2012-05-08 13:36:08 +08:00
我真被编码问题折腾吐过~
9hills
2012-05-08 13:41:08 +08:00
@kojp
htmltext=u"\u8c37\u6b4c\u4e91\u5b58\u50a8"
这个当然是unicode。。u开头的都是unicode,但是它不是utf-8啊

unicode是直接可以print的,utf-8也是直接可以在UTF-8的终端中print的。。。但是不能混

你这句
msgText.set_charset("utf-8")
msgText = MIMEText(htmlText, 'html', 'utf-8')
明明htmlText是unicode,但是你又把它指定为utf-8。。岂不是会混乱
kojp
2012-05-08 13:42:29 +08:00
@wynemo

伸手党来了,貌似只能靠你拯救了。哥们~~

按你的说法,我已经可以成功print 出中文了。

但是,当我把这串unicode传到sendmail里面去,提示要字符串。(返回的是list0
我乖乖地str(htmltext)然后,再print 就成'\xe5\x91\xa8\xe6\'这个样子了。不用str用unicode更糟糕,字节都给分散了~~
9hills
2012-05-08 13:46:30 +08:00
@kojp replay to #20
你这一大串是utf-8。。。
打开python,试试下面这个(Linux UTF-8 locale)

>>> a="中文" #a是utf-8的字符串
>>> a
'\xe4\xb8\xad\xe6\x96\x87'
>>>print a #打印a
中文
>>> au=a.decode("utf8") #把a变成unicode
>>> au
u'\u4e2d\u6587'
>>> print au
中文
>>> au.encode("utf8") #又把unicode的au变成utf8
'\xe4\xb8\xad\xe6\x96\x87'
9hills
2012-05-08 13:47:41 +08:00
@kojp #23 本来就是字符串,不要用str,repr来转编码。。。
用 htmltext.encode("utf8") 转
kojp
2012-05-08 13:50:06 +08:00
结贴!

谢谢各位!
kojp
2012-05-08 13:52:47 +08:00
不光吐血,感触N多。。。很多都是因为基础知识不够扎实-------回去恶补!
这两天要写一篇总结同来。

再次谢谢各位v2exer! (抱拳!)
kojp
2012-05-08 13:55:25 +08:00
"""我乖乖地str(htmltext)然后,再print 就成'\xe5\x91\xa8\xe6\'这个样子了。不用str用unicode更糟糕,字节都给分散了~~"""


关于这个问题,我是这样解决的,(估计可能有其它的函数或者方法,但我没找见怪不怪

我直接循环了一下返回的unicode列表。然后字符串拼接一下。然后传给sendmail.

这个办法貌似土到家了,但暂时也只能这样。记得上次有个问题也是这样解决的。总的来说,还是对list和str的内部结构了解不够透彻。
binux
2012-05-08 14:07:28 +08:00
完全不明白说的是什么。。
reus
2012-05-08 14:11:09 +08:00
一个unicode列表转换成str这样就行了啊
''.join(s.encode('utf8') for s in l)

说到底就是你不知道encode, decode这两个方法,编码转换根本不需要用到str和unicode两个函数的
reus
2012-05-08 14:21:37 +08:00
你的程序最下面那个htmlText的类型是unicode,也就是unicode字符串,如果要转换成str类型的字符串,直接htmlText.encode('utf8')就可以了
benzhe
2012-05-08 14:41:43 +08:00
貌似 python 的编码问题的确会难处理一些,当初只是弄一个文件上传,文件名的编码也是折腾了很久。php javascript 怎么弄都没这么麻烦...
csx163
2012-05-08 14:58:26 +08:00
@Livid 每次遇到这种情况都tm的想死啊
reus
2012-05-08 15:08:13 +08:00
php也一样要用到iconv处理编码,py不比其他语言更难处理,是使用者对unicode不理解而已
clowwindy
2012-05-08 19:57:16 +08:00
理解什么是 Unicode,什么是编码,比理解怎么在语言里用这些东西更重要一些。
kojp
2012-05-08 20:03:32 +08:00
@reus
encode,decode的字面意思,是知道的。但很多时候,感觉他们就是不听话~~~~
iconv感觉半个小时就能解决吧,而且绝对不至于折腾到想吐~~~
@clowwindy

有道理,经历此事件后,需要各种恶补。
reus
2012-05-08 20:12:46 +08:00
@kojp php用iconv就相当于没有unicode类型,全部是str类型。py多了个unicode类型,可以直接len而不是像php一样要mb_strlen,更方便了

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

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

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

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

© 2021 V2EX