将字符串编码为八进制utf-8 Python 3
有没有一种很好的方法将字符串编码为utf-8,但使用八进制格式而不是默认的十六进制格式 例如:将字符串编码为八进制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") 'õ' >>>
>>> "õ".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()
'õ'