在 IDLE 中可以直接将 unicode 字符按'\xaa\xbb'这种格式输出,如下所示
| >>> s = u'熊猫'
| >>> s.encode('utf-8')
'\xc3\x90\xc3\x9c\xc3\x83\xc2\xa8'
| >>>
现在有一个比较特殊的需求,需要编写的 python 脚本用 print 按这个格式输出,在 Stackoverflow 上找了一圈又 google 了半天,进行了下列尝试:
1,直接 print s.encode('utf-8'),直接输出了'熊猫'
2,使用 join kwd = u'熊猫' print ' '.join(hex(ord(kwdChar)) for kwdChar in kwd)
输出结果是:0x718a 0x732b
此外还发现 kwd = '熊猫'执行的结果跟加了 u 的 unicode 不一样,应该是被当作了 string 了吧。 kwd = '熊猫'的结果是:0xe7 0x86 0x8a 0xe7 0x8c 0xab
其他陆续也在网上找了不少资料,包括介绍 unicode 编码以及 python 2.x 与 unicode 之间的各种问题的文章,但好像都没办法实现这个需求。客户催的也比较急,想问问 v2 上有没有 python 高手能帮忙看看找个合适的方法。
1
zhoulv2012 2017-09-19 10:24:08 +08:00 via Android
尝试先 decode ?
|
2
albertofwb 2017-09-19 10:31:18 +08:00
我在 python3.4 中测试,可以直接 print(a.encode()) 实现你的要求
https://www.jianguoyun.com/p/DRPpH-0Qhp-3BhiKnjU |
3
albertofwb 2017-09-19 10:35:34 +08:00
|
4
SmiteChow 2017-09-19 11:03:52 +08:00
```
print repr('你好') ``` |
5
shayuvpn0001 OP |
6
shayuvpn0001 OP @SmiteChow 输出是汉字,版本 2.7,谢谢。
|
7
SmiteChow 2017-09-19 11:52:21 +08:00
|
8
albertofwb 2017-09-19 12:17:05 +08:00 via Android
@shayuvpn0001 你看看第二个方法里面的第二个链接,需要做一点替换就能达到要求
|
9
shayuvpn0001 OP @albertofwb 谢谢,第二个执行结果跟你贴图一致,有个小问题是最前面查个\x,代码: <br>
s = '呵呵' <br> print "\\x".join("{:02x}".format(ord(c)) for c in s) <br> print repr(s) <br> s = u'呵呵' <br> print "\\x".join("{:02x}".format(ord(c)) for c in s) <br> print repr(s) <br> s = '呵' <br> print "\\x".join("{:02x}".format(ord(c)) for c in s) <br> print repr(s) <br> s = u'呵' <br> print "\\x".join("{:02x}".format(ord(c)) for c in s) <br> print repr(s) <br> 结果: <br> e5\x91\xb5\xe5\x91\xb5 <br> '\xe5\x91\xb5\xe5\x91\xb5' <br> 5475\x5475 <br> u'\u5475\u5475' <br> e5\x91\xb5 <br> '\xe5\x91\xb5' <br> 5475 <br> u'\u5475' <br> @SmiteChow 我的 python 2.7 + Debian 8.6,代码: <br> print repr(kwd) <br> print repr(kwd.encode('utf-8')) <br> print repr(kwd.encode('utf-8').encode('hex')) <br> 结果: <br> u'\u7075' <br> '\xe7\x81\xb5' <br> 'e781b5' <br> 跟客户又沟通了一下,其实他是怕 unicode 字符输出有问题,打印了方便测试人员(外包给阿三了)比对,所以才要这个效果。他其实更关心的是 unicode 在 mysql 中存储的问题,这些需要处理的 unicode 编码文字要存到 mysql 的 keyword 字段,刚开始用的是 utf8_general_ui 存储,该字段有 UNIQUE 的索引,出现了大写 G 和小写 g 被认为是同一字符而引发了插入错误。后来改成了 utf8_bin,大小写问题解决,但是还是有部分转义字符报错,他想把这些有问题的按字节打印输出方便测试检查。 PS:如果实在是有些很奇葩的语言,比如北欧国家使用的字符,东南亚、阿拉伯使用的字符,开一个新的单独字段专门存\xe5\x91\xb5 字节码,能解决他这个 UNIQUE 的索引问题么? 谢谢 |
10
artandlol 2017-09-20 12:01:25 +08:00
u"""
balabala 呵呵呵哈哈哈哈 """" |