免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4586 | 回复: 2
打印 上一主题 下一主题

[已解决][字符串解码] 请教Python的字符串解码 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-07-29 17:10 |只看该作者 |倒序浏览
本帖最后由 wzhuzhu 于 2010-07-30 09:59 编辑

大家好,我现在用Python写网络程序,在处理传送过来的中文时存在一个问题,请大家指教:
客户端传输过来的字节: \x4e\x00\x4e\x8c\x4e\x09
其实真好对应中文的: 一二三的utf-8的编码。
接收过来的字符串怎么处理都不能得到正确的中文:

  1. >> test_str = '\x4e\x00\x4e\x8c\x4e\x09'
  2. >>> test_str.decode('utf8')
  3. Traceback (most recent call last):
  4.   File "<stdin>", line 1, in <module>
  5.   File "/usr/lib/python2.6/encodings/utf_8.py", line 16, in decode
  6.     return codecs.utf_8_decode(input, errors, True)
  7. UnicodeDecodeError: 'utf8' codec can't decode byte 0x8c in position 3: unexpected code byte
  8. >>> test_str.decode('utf16')
  9. u'N\u8c4e\u094e'
  10. >>>test_str = u"一二三"
  11. >>> test_str
  12. u'\u4e00\u4e8c\u4e09'
复制代码
请问我要如何操作才能得到正确的中文。
谢谢!

论坛徽章:
0
2 [报告]
发表于 2010-07-29 19:45 |只看该作者
一二三的utf8编码应该是九个字节,你这个编码只有六个。
所以可能是你没有接收成功。
正确的应该是:\xe4\xb8\x80\xe4\xba\x8c\xe4\xb8\x89

论坛徽章:
0
3 [报告]
发表于 2010-07-30 09:58 |只看该作者
问题找到。由于我程序使用的是twistd来进行的。就是:

  1. twistd -ny test.py
复制代码
结果使用print打印出来的总提示
exceptions.UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 3: ordinal not in range(12
后来我改成

  1. python test.py
复制代码
结果就正确了。郁闷,看来是twistd有点问题。
谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP