在python中編寫unicode程序有哪些一般指導< = 2.7?是否習慣於在每個字符串前添加u,即使它不包含ASCII範圍之外的任何字符?在Python中編寫unicode程序<= 2.7
在處理sqlite3時,參數化查詢會自動將unicode編碼爲utf-8,還是需要手動完成?
當處理字符串的字符串時,它應該保留爲字符串對象還是解碼爲unicode字符串? (我相信這會在大多數情況下拋出異常)
如果由於任何原因,我需要在代碼中使用字符unicode字符,只要它是一個unicode字符串,我就可以在字符串中使用該字符,並且我有我的編碼在文件的頂部聲明?
編輯:當打印一個unicode字符串時,如何獲取用戶系統的區域設置,以便我可以正確編碼它?盲目地將一切編碼爲utf-8似乎是一個糟糕的主意,因爲並非所有的系統都支持它。編輯:我相信我想出了這一個。它可以使用語言環境
import locale
encoding = locale.getpreferredencoding()
編輯:這種編碼實際上是隱式地完成的嗎?現在我很困惑。在Linux上,我能做到這一點
s = u'\u2c60'
print s # prints Ⱡ
print s.encode('utf-8') # prints Ⱡ
但在Windows出現這種情況
s = u'\u2c60'
print s # prints Ⱡ in IDLE, UnicodeEncodeError in cmd
print s.encode('cp1252') # UnicodeEncodeError
print s.encode('utf-8') # prints â±
print s.encode('cp1252', 'replace') # prints ?
它似乎像印刷確實隱含轉換...
編輯:這個問題說,打印將自動編碼存儲在sys.stdout.encoding Why Does Python print unicode characters when the default encoding is ASCII?
現在我想知道,有沒有辦法使默認行爲或打印來取代不可編碼的字符?或者我需要包裝印刷在我自己的函數,是這樣的:
def myPrint(msg):
print msg.encode(sys.stdout.encoding, 'replace')
我知道這些問題大部分都在Python 3已經解決,但我想支持蟒蛇< = 2.7。
http://nedbatchelder.com/text/unipain.html –
Python 2支持Unicode與Python 3一樣,主要是;使用'io.open()'(或'from future_builtins import open')來使用與Python 3相同的文件I/O。解碼並在邊緣編碼(在輸入時解碼,在輸出時編碼)就像Python 3,在其他地方將文本視爲unicode。 –