2012-07-27 41 views
0
with open(path) as f: 
     for line in f: 
      print line 

path是單行文件\xc2的Python:從打印文件讀取「 XC2」有相同的值正常,但打印字符串變量失敗

當我運行此我得到

\xc2

現在讓我們改變這個

with open(path) as f: 
    for line in f: 
       var = '\xc2' 
       print var 

當我運行它,我看到

UnicodeDecodeError: 'ascii', '\xc2d', 0, 1, 'ordinal not in range(128)' 

然後我嘗試比較,所以我做

with open(path) as f: 
    for line in f: 
     line = line.strip() 
     line1 = '\xc2d' 
     # print line1 
     print line == line1 

,我看到False

這到底是怎麼發生的?

+2

你想要一個原始字符串。 ''\ xc2d''正在被轉義,所以它看起來像你想要的是'r'\ xc2d'',或''\\ xc2d'' – mgilson 2012-07-27 20:16:02

+1

@JoelCornett,它實際上被解釋爲字符碼0xc2(不是Unicode)其次是'd'。 'len('\ xc2d')'返回2. – 2012-07-27 20:35:11

+0

@MarkRansom:糟糕你是對的。 – 2012-07-27 20:36:03

回答

2

從文件中讀取字符時,\只是另一個字符,沒有特殊含義。當你嘗試從它創建一個字符串時,它被用作一個具有特殊含義的轉義,具體取決於後面的內容。例如\x表示採用接下來的2個十六進制數字並創建與十六進制代碼對應的字符,因此'\xc2'是單個字符。由於此字符代碼不在0到127(0x7f)的ASCII範圍內,因此嘗試打印時出現錯誤。