建立日期: 2020/05/03
修訂日期: None
相關軟體資訊:
Win 10 | Python 3.7.6 |
說明: 本文請隨意引用或更改,只須標示出處及作者,作者不保證內容絕對正確無誤,如造成任何後果,請自行負責.
前言
整理一下有關各類 str
及 bytes
的編碼轉換, 一下子想不到太多, 不一定齊全.
介紹
以下內容不細說其他各項引數, quote
以及unquote
來自urllib.parse
str.encode(encoding='utf-8')
按指定的編碼轉換 str 為 bytes
bytes.decode(encoding='utf-8')
按指定的編碼轉換 bytes 為 str
bytes.hex()
轉換 byte 為十六進位數字的 str
bytes.fromhex(str)
轉換十六進位的字串為 bytes
quote(str | bytes)
轉換 bytes 或 str 為 url 編碼方式的 str
unquote(str)
轉換 url 編碼方式的 str 為 unicode str
編碼
'latin-1'
byte 與 char 的轉換
程式碼
六種不同格式的 str 或 bytes 之間的轉換.
from urllib.parse import quote, unquote
def test(a, b):
global flag
if a != b:
print(f'{a} != {b}')
flag = False
String_Unicode = '珠海市2020年'
String_Hexcode = '\xe7\x8f\xa0\xe6\xb5\xb7\xe5\xb8\x822020\xe5\xb9\xb4'
String_Bytecode = 'e78fa0e6b5b7e5b88232303230e5b9b4'
String_Urlcode = '%E7%8F%A0%E6%B5%B7%E5%B8%822020%E5%B9%B4'
Byte_Unicode = b'\xe7\x8f\xa0\xe6\xb5\xb7\xe5\xb8\x822020\xe5\xb9\xb4'
Byte_Hexcode = b'e78fa0e6b5b7e5b88232303230e5b9b4'
flag = True
# String_Unicode
test(String_Unicode.encode().decode('latin-1'), String_Hexcode)
test(String_Unicode.encode().hex(), String_Bytecode)
test(quote(String_Unicode), String_Urlcode)
test(String_Unicode.encode(), Byte_Unicode)
test(String_Unicode.encode().hex().encode(), Byte_Hexcode)
# String_Hexcode
test(String_Hexcode.encode('latin-1').decode(), String_Unicode)
test(String_Hexcode.encode('latin-1').hex(), String_Bytecode)
test(quote(String_Hexcode.encode('latin-1')), String_Urlcode)
test(String_Hexcode.encode('latin-1'), Byte_Unicode)
test(String_Hexcode.encode('latin-1').hex().encode(), Byte_Hexcode)
# String_Bytecode
test(bytes.fromhex(String_Bytecode).decode(), String_Unicode)
test(bytes.fromhex(String_Bytecode).decode('latin-1'), String_Hexcode)
test(quote(bytes.fromhex(String_Bytecode)), String_Urlcode)
test(bytes.fromhex(String_Bytecode), Byte_Unicode)
test(bytes.fromhex(String_Bytecode).hex().encode('latin-1'), Byte_Hexcode)
# String_Urlcode
test(unquote(String_Urlcode), String_Unicode)
test(unquote(String_Urlcode).encode().decode('latin-1'), String_Hexcode)
test(unquote(String_Urlcode).encode().hex(), String_Bytecode)
test(unquote(String_Urlcode).encode(), Byte_Unicode)
test(unquote(String_Urlcode).encode().hex().encode(), Byte_Hexcode)
# Byte_Unicode
test(Byte_Unicode.decode(), String_Unicode)
test(Byte_Unicode.decode('latin-1'), String_Hexcode)
test(Byte_Unicode.hex(), String_Bytecode)
test(quote(Byte_Unicode), String_Urlcode)
test(Byte_Unicode.hex().encode(), Byte_Hexcode)
# Byte_Hexcode
test(bytes.fromhex(Byte_Hexcode.decode('latin-1')).decode(), String_Unicode)
test(bytes.fromhex(Byte_Hexcode.decode()).decode('latin-1'), String_Hexcode)
test(Byte_Hexcode.decode(), String_Bytecode)
test(quote(bytes.fromhex(Byte_Hexcode.decode('latin-1'))), String_Urlcode)
test(bytes.fromhex(Byte_Hexcode.decode('latin-1')), Byte_Unicode)
if not flag:
print('All Pass !')
本作品採用《CC 協議》,轉載必須註明作者和本文連結