2012-01-17 100 views
1
In [1]: str='美' 

In [2]: str.encode('utf-8') 
Out[2]: b'\xe7\xbe\x8e' 

In [3]: str.encode('utf-16') 
Out[3]: b'\xff\xfe\x8e\x7f' 

In [4]: str.encode('ascii') 
--------------------------------------------------------------------------- 
UnicodeEncodeError      Traceback (most recent call last) 
/Users/XXXuserXXXTemp/<ipython-input-4-c7b96e3e54a7> in <module>() 
----> 1 str.encode('ascii') 

UnicodeEncodeError: 'ascii' codec can't encode character '\u7f8e' in position 0: ordinal not in range(128) 

str是中文/日文字符。爲什麼str.encode('ascii')不適用於這種情況?

  • 爲什麼ascii不起作用?

  • 如何理解Out [2]和Out [3],即他們究竟是什麼?

+0

我沒有看到'Out [1]'。你的意思是「如何理解Out [2]和Out [3]」? – 2012-01-17 04:35:09

+0

是的。我修復了錯字。 – qazwsx 2012-01-17 07:15:30

回答

5

爲什麼ascii不起作用?

str='美'不是ASCII字符,它在ASCII範圍之外,因此不能表示爲ASCII字符。

Unicode tutorial for python

編碼不必處理每一個可能的Unicode字符,並且多數編碼沒有。例如,Python的默認編碼是'ascii'編碼。將Unicode字符串轉換爲ASCII編碼的規則很簡單;對於每個碼點:

  1. 如果碼點是< 128,每個字節是一樣的代碼點的值。

  2. 如果代碼點爲128或更大,則Unicode字符串不能用此編碼表示。 (在這種情況下,Python引發了一個UnicodeEncodeError異常。)


如何理解Out[2]Out[3],即他們究竟是誰?

它們是字節串(不是字符串)。 Out[2]是以UTF-8代碼單元表示代碼點的代碼點的字節序列。符號\xe7表示具有十六進制值e7的字節。 Out[3]是以UTF-16代碼單元表示代碼點的代碼點的字節序列。

要理解字符,字節和代碼單元之間的區別,請仔細和完整地閱讀Unicode tutorial for python。對於另一個相當不錯的,處理相同的材料,閱讀Joel Spolsky的The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)。你應該知道這些,沒有任何藉口!

+0

「每個字節與代碼點的值相同」是什麼意思?你能用一個例子來說明嗎? – qazwsx 2012-01-17 07:17:32

+0

在「逃脫形式」中,逃脫了什麼? 「Unicode值序列」仍然有些不確定。它究竟是什麼? – qazwsx 2012-01-17 07:21:01

4
  • ASCII不包含漢字/漢字,因此沒有對其進行編碼沒有有效的辦法。

  • 它們是encoded text

2

由於錯誤提示您提供了非ascii字符並試圖將其編碼爲ascii。將無法工作,它必須是一個ascii字符編碼爲ascii。如果你想找到ASCII字符,你可以看看這裏。

http://www.asciitable.com/

基本上只在ASCII基本字符是英文字母和標點符號一些/特殊字符。

2

您不能將該字符編碼爲ascii,因爲它不是可以用ascii表示的字符的一部分。

Out[2]Out[3]是utf-8和utf-16中字符的二進制表示形式。

相關問題