Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将ascii字符串强制输出为字节_Python_Python 2.7_Unicode - Fatal编程技术网

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' 我怎样才能禁止这种行为? 或者我应该手动构建此类功能?尝试以下

如果我试图在交互式python会话中探索非ascii字符串:

>>> 'юникод'
'\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
(相当于Py3
bytearray
,包括迭代以获取
int
值),然后使用内置函数
map
,这样您就可以执行
''。join(map('\\x{:02x}.format,bytearray(s))
将所有循环移动到C层(在CPython引用解释器中)。注意:您的答案很好(向上投票),我只是喜欢找到让Python在Python层下做更多工作的方法。避免大量
ord
调用的一个稍微聪明的替代方法是一次将所有内容转换为
bytearray
(这相当于Py3
bytearray
,包括迭代以获取
int
值),然后使用内置函数
map
,这样您就可以执行
'.join(map('\\x{:02x}).format,bytearray(s))
将所有循环移动到C层(在CPython引用解释器中)。注意:您的答案很好(投票结果较高),我只是喜欢找到方法让Python在Python层下做更多的工作。