簡體   English   中英

關於python unicode的困惑

[英]Confusion about python unicode

我已經在Windows7中通過崇高的文字編寫了一個python文件,文件中包含一些中文字符,因此當我運行它時,這些字符變得無法識別(在cmd和git bash中也是如此):

# -*- coding: utf-8 -*- 
str = "測試"

print str

arr = []
arr.append(str)

print arr

結果是:

嫻嬭瘯
['\xe6\xb5\x8b\xe8\xaf\x95']

我怎么解決這個問題? 這個問題的原因是什么? 並且arr打印結果不應是\\uXXX\u003c/code>這樣的unicode?

順便說一下,如果沒有# -*- coding: utf-8 -*-我什# -*- coding: utf-8 -*-無法運行它:

$ python test.py
  File "test.py", line 2
SyntaxError: Non-ASCII character '\xe6' in file test.py on line 2, but no encodi
ng declared; see http://www.python.org/peps/pep-0263.html for details

我只是用谷歌搜索語句,為什么沒有它就無法運行代碼?

# -*- coding: utf-8 -*-指定文件中使用的編碼

由於字符串是字節字符串而不是unicode字符串,因此您將獲得['\\xe6\\xb5\\x8b\\xe8\\xaf\\x95']作為輸出,請在字符串中添加u前綴以將其轉換為unicode字符串。

>>> strs = u"測試"
>>> lis = [strs]
>>> print lis
[u'\u6d4b\u8bd5']
>>> print lis[0]
測試

您會看到字符串的UTF-8編碼版本(順便說一句,您不應將其命名為str )。 通過在腳本的開頭添加# -*- coding: utf-8 -*-行,您將告訴Python這是腳本正在使用的編碼。 確定它實際上正在使用該編碼嗎?

如果不是這種情況(請檢查您的編輯器!),或者您的終端窗口(在其中print字符串的窗口)正使用不同的編碼,則會出現亂碼(如果編碼的字符串不能以該編碼進行解釋)。

僅當解碼 (字節)字符串時,您才會獲得Unicode對象。

因此,首先您需要了解終端的字符編碼。 然后,您應該將所有字符串盡快轉換為Unicode,並僅在程序中處理Unicode對象,直到需要輸出它們為止;此時,您需要將它們編碼為正確的編碼。

例如

# -*- coding: utf-8 -*- 
s = u"測試"
s = s + u"嫻嬭瘯"
print s.encode("somecodepage")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM