免费注册 查看新帖 |

Chinaunix

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

请教一个有关Python显示输入GBK字符的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-12-09 09:47 |只看该作者 |倒序浏览
各位大牛兄弟姐们,你们好!我初接触python,准备用python写一个小脚本,但是被一个地方卡住了,特意来着请教大家。
我的程序如下:
datagram='BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC'
GBKdata=datagram[42:142].upper()
tmpGBK=''
GBKchar=''
for i in range(0,100,2):
        tmp=GBKdata[i:i+2]
        tmpGBK=tmpGBK+'\\x'+tmp
for i in range(0,200,8):
        GBKchar=tmpGBK[i:i+8]
        print (tmpGBK[i:i+8]),
print
程序的目的是根据GBK编码打印出对应的汉字,但是打印出来的类似这样: \xC1\BD,而我的目的是打印出汉字“两”,GBK码为C1BD

如果单纯的  print '\xC1\BD'  缺可以打印出来,不知道为什么?

论坛徽章:
0
2 [报告]
发表于 2013-12-09 09:47 |只看该作者
自己顶起来,希望大家不吝赐教

论坛徽章:
4
白羊座
日期:2013-11-05 10:26:09冥斗士
日期:2015-11-17 14:19:55白银圣斗士
日期:2015-11-17 15:13:0815-16赛季CBA联赛之新疆
日期:2016-04-01 09:10:58
3 [报告]
发表于 2013-12-09 11:11 |只看该作者
回复 1# ricksion


关键的原因在于你是使用 '\\x', 你可以在 python 命令行模式上试验下:
用 print '\xBD\xC1'   和 print '\\xBD\\xC1' 比较,看有什么区别。
前者是指明输出一个十六进制数,后者是转义输出一个 "\"。

论坛徽章:
0
4 [报告]
发表于 2013-12-09 21:14 |只看该作者
回复 3# icymirror

但是,如果不写成\\x的话,编译不通过的喔?如果要实现的我的目的的话,该怎么修改?


   

论坛徽章:
0
5 [报告]
发表于 2013-12-10 08:39 |只看该作者
#coding=gbk
import re

aa='\\xC1\\xBD'
bb=aa.decode("string_escape")
print bb

论坛徽章:
0
6 [报告]
发表于 2013-12-10 10:23 |只看该作者
本帖最后由 remyzane 于 2013-12-10 10:34 编辑

楼主的思路不对,参数被编码成16进制了,那就要先把16进制转换成10进制,再将10进制转换成字符
我改的代码:
datagram='BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC1BDC'
GBKdata=datagram[42:142].upper()
gbkStr = utfStr = ''
for i in range(0,100,2):
    gbkStr = gbkStr + chr(int(GBKdata[i:i+2], 16))

utfStr = gbkStr.decode('gbk')
print utfStr # 输出: 两两两两两两两两两两两两两两两两两两两两两两两两两

不好意思刚看到楼上的解决方法,效率更高,推荐使用,在非M$Windows平台输出应该还需要decode('gbk')一下

论坛徽章:
0
7 [报告]
发表于 2013-12-10 17:03 |只看该作者
回复 5# xmchenb
6#remyzane


感谢两位的回复,我改了一下,可以了,多谢多谢!

论坛徽章:
0
8 [报告]
发表于 2013-12-10 17:06 |只看该作者
回复 5# xmchenb

非常感谢!


   

论坛徽章:
0
9 [报告]
发表于 2013-12-10 17:07 |只看该作者
回复 6# remyzane


    非常感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP