首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Python 字元與代碼點互轉完全指南:ord、chr、unichr、ASCII 與 Unicode 邊界詳解

     編輯:更多程式設計知識

字元與整數代碼點(Code Point)互轉是文字處理基礎。Python 2/3 在此處有顯著差異。本文釐清 ord/chr/unichr 行為邊界,並提供批次轉換實用模式。

核心函數對照表

函數Python 版本輸入輸出適用範圍
ord(c)2/3長度 1 字串整數代碼點全 Unicode (0 ~ 0x10FFFF)
chr(i)3整數 0 ~ 0x10FFFF字串 (長度 1)全 Unicode
chr(i)2整數 0 ~ 255位元組字串僅 ASCII/擴展 ASCII
unichr(i)2整數 0 ~ 0x10FFFFUnicode 字串全 Unicode
str(i)2/3任意物件字串表達非字元轉換

基本範例


# ASCII 範圍
print(ord('A'))      # 65
print(chr(65))       # 'A' (Py3) / 'A' (Py2)

# Unicode 範圍
print(ord('哈'))      # 21704 (0x54C8)
print(chr(21704))    # '哈' (Py3)
# Py2: unichr(21704) -> u'哈'

# 邊界測試
print(chr(0x10FFFF))  # 最大合法代碼點
# chr(0x110000) -> ValueError

chr() vs str() 關鍵差異


print(chr(97))   # 'a'   (代碼點 -> 字元)
print(str(97))   # '97'  (整數 -> 字串表達)

批次轉換實用模式


# 字串 -> 代碼點列表
text = 'Python'
codes = [ord(c) for c in text]
print(codes)  # [80, 121, 116, 104, 111, 110]

# 代碼點列表 -> 字串
text2 = ''.join(chr(c) for c in codes)
print(text2)  # 'Python'

# 使用 map(函數式風格)
codes = list(map(ord, '哈囉'))
print(codes)  # [21704, 21705]

text3 = ''.join(map(chr, range(21704, 21707)))
print(text3)  # '哈囉嘩'

進階:Unicode 正規化與字素叢集


import unicodedata

# 合成字元 vs 分解字元
s1 = 'é'           # U+00E9 (單一代碼點)
s2 = 'e\u0301'     # e + 重音符 (兩個代碼點)

print(ord(s1))          # 233
print([ord(c) for c in s2])  # [101, 769]

# 正規化為 NFC (合成形式)
print(unicodedata.normalize('NFC', s2) == s1)  # True

# 正確計算「使用者感知字元數」(字素叢集)
import regex  # pip install regex
len(regex.findall(r'\X', s2))  # 1

Python 2/3 遷移備忘

  • Py2: chr 只支援 0-255,Unicode 用 unichr;字串預設 bytes。
  • Py3: chr 支援全 Unicode;unichr 移除;字串預設 Unicode。
  • 相容寫法:try: unichr except NameError: unichr = chr

掌握代碼點互轉,是處理編碼、加密、字型、自然語言的入門鑰匙。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved