Python 将ascii字符串强制输出为字节
如果我试图在交互式python会话中探索非ascii字符串:Python 将ascii字符串强制输出为字节,python,python-2.7,unicode,Python,Python 2.7,Unicode,如果我试图在交互式python会话中探索非ascii字符串: >>> 'юникод' '\xd1\x8e\xd0\xbd\xd0\xb8\xd0\xba\xd0\xbe\xd0\xb4' 它以字节的形式获取字符串(因为python 2中的str实际上是字节) 我希望获得ascii字符串的相同表示形式,但python隐式地将其转换为字符串表示形式 >>> 'unicode' 'unicode' 我怎样才能禁止这种行为? 或者我应该手动构建此类功能?尝试以下
>>> 'юникод'
'\xd1\x8e\xd0\xbd\xd0\xb8\xd0\xba\xd0\xbe\xd0\xb4'
它以字节的形式获取字符串(因为python 2中的str
实际上是字节)
我希望获得ascii字符串的相同表示形式,但python隐式地将其转换为字符串表示形式
>>> 'unicode'
'unicode'
我怎样才能禁止这种行为?
或者我应该手动构建此类功能?尝试以下操作:
s = 'unicode'
print ''.join(['\\x%02x' % (ord(c)) for c in s])
给出:
\x75\x6e\x69\x63\x6f\x64\x65
请尝试以下操作:
s = 'unicode'
print ''.join(['\\x%02x' % (ord(c)) for c in s])
给出:
\x75\x6e\x69\x63\x6f\x64\x65
如果您只想快速检查十六进制值:
>>> s = 'unicode'
>>> s.encode('hex_codec')
'756e69636f6465'
如果您只想快速检查十六进制值:
>>> s = 'unicode'
>>> s.encode('hex_codec')
'756e69636f6465'
你是说你想要每个字符都是十六进制的吗。符号?@cdarke yep与非ascii字符串相同您的意思是希望每个字符都是十六进制的吗。表示法?@cdarke-yep与非ascii字符串相同,避免大量
ord
调用的一个稍微聪明的替代方法是一次将所有内容转换为bytearray
(相当于Py3bytearray
,包括迭代以获取int
值),然后使用内置函数map
,这样您就可以执行''。join(map('\\x{:02x}.format,bytearray(s))
将所有循环移动到C层(在CPython引用解释器中)。注意:您的答案很好(向上投票),我只是喜欢找到让Python在Python层下做更多工作的方法。避免大量ord
调用的一个稍微聪明的替代方法是一次将所有内容转换为bytearray
(这相当于Py3bytearray
,包括迭代以获取int
值),然后使用内置函数map
,这样您就可以执行'.join(map('\\x{:02x}).format,bytearray(s))
将所有循环移动到C层(在CPython引用解释器中)。注意:您的答案很好(投票结果较高),我只是喜欢找到方法让Python在Python层下做更多的工作。