HOWTO · Python

在 Python 中將 Int 轉換為 ASCII

本教程演示如何在 python 中將 int 轉換為 ascii

本頁內容

在 Python 3 中,呼叫 chr(code_point) 可將整數 Unicode 碼點轉成只含一個字元的字串。只有當數值位於標準 ASCII 範圍 0 到 127 時,結果才是 ASCII 字元;較大的數值可能會產生 ASCII 以外的 Unicode 字元。例如,chr(65) 會回傳 A。標準 ASCII 使用的數值是 0–127,不是 256 個值,因此只有整數落在這個範圍內時,稱為「整數轉 ASCII」才精確。

使用 chr() 將整數轉成字元

當整數代表字元的碼點時,請使用 chr()。回傳值是只含一個字元的 Python 字串。執行以下範例:

本節中的程式碼以及顯示的標籤或輸出仍為英文。

code_point = 65
character = chr(code_point)
print(character)
print(ord(character))
A
65

輸出的第一行是碼點 65 對應的字元。第二行則顯示 ord() 如何將這個單一字元轉回其碼點。對 ASCII 字元而言,這個數值同時也是 ASCII 值;對其他字元而言,它是 Unicode 碼點,而不是 ASCII 值。

這個操作也適用於 ASCII 範圍之外的值。例如,chr(233) 會回傳 é;它的碼點不在 ASCII 範圍內。如果有多個碼點,可以對每個碼點呼叫 chr(),再將產生的字元串接起來:

code_points = [72, 105, 33]
message = "".join(chr(value) for value in code_points)
print(message)
Hi!

Python 3 接受介於 0 到 0x10FFFF(含端點)的 Unicode 碼點。超出此範圍的值會使 chr() 引發 ValueError。上限包含在有效範圍內:chr(0x10FFFF) 有效,而 chr(0x110000) 則超出範圍。如果要妥善處理不可信的數值,請在轉換前先檢查範圍。

使用字串格式化轉換整數

字元格式化也是將整數轉成字元的方法。%c 格式和 f-string 中的 :c 格式指定符,都會將整數格式化為對應的字元。它們不會執行另一種 ASCII 編碼;ASCII 範圍的區別仍然相同。

若要維護使用百分比格式化的程式碼,請使用 %c:

本節中的程式碼以及顯示的標籤或輸出仍為英文。

code_point = 66
print("%c" % code_point)
B

使用 f-string 時,請在整數運算式後加上 :c:

code_point = 67
print(f"{code_point:c}")
C

在組合較長的字串時,這些格式很實用。請依照周邊程式碼選擇其中一種寫法;如果想明確表達從碼點轉成字元,或需要轉換一組數值,則可使用 chr()。每種方法都會將整數轉成字元,因此若數值要代表 ASCII,仍須落在 0–127。

Python 2:使用 unichr(),並用 ord() 將字元轉回碼點

unichr() 是 Python 2 中將 Unicode 碼點轉成 Unicode 字元的舊版對應函式。Python 2 也有 chr(),但它處理的是位元組值;因此,若預期結果是 Unicode 字元,應使用 unichr()。Python 3 的字串是 Unicode,且 chr() 可直接處理 Unicode 碼點;撰寫新的 Python 3 程式時,請使用 chr(),而非舊版函式。

在 Python 3 中,ord(character) 接受只包含一個字元的字串,並回傳該字元的 Unicode 碼點。因此,ord("A") 的結果是 65;非 ASCII 字元則會回傳其 Unicode 碼點。對於單一且有效的碼點及其對應字元,ord(chr(value)) 會還原 value,而 chr(ord(character)) 會還原 character。這些是字元與碼點之間的操作,不是通用的位元組編碼或解碼。如果需要特定編碼的位元組,請明確編碼字串,並依資料格式選擇編碼。