永遠在 Unicode 字串上切片,不要在位元組串上切片。
# -*- coding: utf-8 -*-
s = u'中文截取' # Unicode 物件
result = s[:3] # 直接切片 -> u'中文截'
print(result.encode('utf-8')) # 輸出 UTF-8 位元組
s = '中文截取' # 預設即 Unicode str
result = s[:3] # '中文截'
print(result) # 直接印出
# 錯誤:對 UTF-8 bytes 切片
raw = '中文'.encode('utf-8')
print(raw[:3]) # b'\xe4\xb8\xad' -> 只剩半個字,印出亂碼
.decode('utf-8') (Py2) / 直接用 str (Py3)s[:n].encode('utf-8') (Py2) / 直接寫入 (Py3 open encoding='utf-8')三步驟,零亂碼。