簡體   English   中英

python是否提供用於uuencoding的特殊字符列表?

[英]Does python provide a list of special characters for uuencoding?

我可以在Wikipedia上找到uuencode字符映射。 python是否有辦法遍歷此列表?

for x in [builtin_uuencode_mappings]:
    print(x)

我想重點介紹特殊字符,例如“!@#$”等。

Python已經內置了對uuencoded消息進行編碼和解碼的支持。

from codecs import encode  # decode also works
print(encode("my message", 'uu'))
# -> 'begin 666 <data>\n*;7D@;65S<V%G90  \n \nend\n'

python內部使用binasciibinascii編碼或解碼消息。 我們可以使用它來編碼range(64)中的單個字節甚至所有字節(因為uuencoding將6bit轉換為ascii字符: 2**6 == 64 )。

為了生成所有必要的位模式,我們可以計數到64,並將結果向左移動2位。 這樣,最高的6位從0到64計數。然后,只需將其轉換為python bytes ,對它們進行uenencode並提取實際字符即可。

在python2中

from binascii import b2a_uu
for byte in range(64):
    pattern = chr(byte << 2)  # str and bytes are identical in python2
    encoded = b2a_uu(pattern)
    character = encoded[1]  # encoded[0] is the character count in that line
    print "{:2} -> {!r}".format(byte, character)

在python3中,第一部分有點難看。

from binascii import b2a_uu
for byte in range(64):
    pattern = bytes([byte << 2])  # chr().encode() will not work!
    encoded = b2a_uu(pattern)
    character = chr(encoded[1]) 
    print(f"{byte:2} -> {character!r}")

感謝Mark Ransom解釋了為什么移位確實有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM