Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.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
将字符串编码为八进制utf-8 Python 3_Python_Encoding_Utf 8 - Fatal编程技术网

将字符串编码为八进制utf-8 Python 3

将字符串编码为八进制utf-8 Python 3,python,encoding,utf-8,Python,Encoding,Utf 8,有没有一种很好的方法将字符串编码为utf-8,但使用八进制格式而不是默认的十六进制格式 例如: >>> "õ".encode("utf-8") b'\xc3\xb5' 这里的输出是十六进制,而不是八进制。八进制输出为:b'\303\265' Python 3自动处理解码,效果很好: >>> b"\xc3\xb5".decode("utf-8") 'õ' >>>

有没有一种很好的方法将字符串编码为utf-8,但使用八进制格式而不是默认的十六进制格式

例如:

>>> "õ".encode("utf-8")
b'\xc3\xb5'
这里的输出是十六进制,而不是八进制。八进制输出为:b'\303\265'

Python 3自动处理解码,效果很好:

>>> b"\xc3\xb5".decode("utf-8")
'õ'
>>> b'\303\265'.decode("utf-8")
'õ'
我是否缺少一个编解码器或选项?我想避免很多手动字符串操作

更新:我误解了——b“\xc3\xb5”和b“\303\265”之间根本没有区别,它们只是显示相同底层字节码的两种不同方式。事实上:

>>> b"\xc3\xb5" == b'\303\265'
True

首先,您可以使用
ord()
将字符串中的字符转换为Unicode格式,然后,您可以使用
oct()

输出:

0o365

您可以将bytes对象中的每个字节转换为其八进制表示形式

[oct(b) for b in "õ".encode("utf-8")]
给予


您可以操纵结果以将其转换为所需的输出

这里有一个类覆盖它所包装的字符串的表示形式:

>>> class OctUTF8:
...   def __init__(self,s):
...     self.s = s.encode()
...   def __repr__(self):
...     return "b'" + ''.join(f'\\{n:03o}' for n in self.s) + "'"
...
>>> s='õ'
>>> OctUTF8(s)
b'\303\265'
此表示可以作为字节字符串进行计算,并解码回原始值:

>>> eval(repr(OctUTF8(s))).decode()
'õ'

注意:您可能会问一个非常不同的问题:上面的\xc3只是二进制数据的可打印表示形式。我想你是在问如何生成八进制编码的转义码(所以是一个纯ASCII文本文件),而不是如何编码到UTF-8>>>b'\303\265'==b“\xc3\xb5”True,明白了吗。误解是我认为UTF-8字符有多种可能的编码(例如十六进制和八进制),而实际上这只是Python如何显示UTF-8的一个产物。
>>> class OctUTF8:
...   def __init__(self,s):
...     self.s = s.encode()
...   def __repr__(self):
...     return "b'" + ''.join(f'\\{n:03o}' for n in self.s) + "'"
...
>>> s='õ'
>>> OctUTF8(s)
b'\303\265'
>>> eval(repr(OctUTF8(s))).decode()
'õ'