2014-05-08 68 views
1

我試圖運行我的CMD腳本(它工作在IDLE罰款),但我得到這個錯誤:「返回codecs.charmap_encode」沒有特殊字符運行python腳本時

C:\Python34>rule90.py Traceback (most recent call last): File "C:\Python34\rule90.py", line 15, in <module> print(c) File "C:\Python34\lib\encodings\cp850.py", line 19, in encode return codecs.charmap_encode(input,self.errors,encoding_map)[0] UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-39: character maps to <undefined>

雖然我對Python的使用經驗有限,但我認爲我已經足夠了解這一點了。第19行簡單地爲linenew = str(''.join(lineA[numberneg:numberpos])),並且我加入的lineA包含以字符串形式加載的'0'和'1'。我有■和□字符,但它們應該是cmd中的默認字符,並且錯誤不在該行上。

任何幫助,將不勝感激!

lineA = ['0','0','0','0','0','0','1','0','0','0','0','0','0'] 
lineB = lineA[:] 
lineC = lineA[:] 
lineC = ['□' if x=='0' else '■' for x in lineC] 
counth = 0 
max_counth = len(lineA) - 2 
countv = 0 
max_countv = len(lineA)/2 - 1 

while countv < max_countv: 
    number = 1 
    counth = 0 
    lineCstr = map(str, lineC)  
    c = ''.join(lineCstr) 
    print(c) 
    while counth < max_counth: 
     numberneg = number - 1 
     numberpos = number + 2 
     linenew = str(''.join(lineA[numberneg:numberpos])) 
     if linenew == str('110') or linenew == str('100') or linenew == str('011') or linenew == str('001'): 
      lineB[number] = '1' 
      lineC[number] = '■' 
     else: 
      lineB[number] = '0' 
      lineC[number] = '□' 
     number = number + 1 
     counth = counth + 1 

    lineA = lineB[:] 
    countv = countv + 1 
input("Press Enter to continue...") 

lineA通常是一個較長的列表(25+數字),但對於節省空間的緣故,我縮短了它。

+0

請發表您的腳本的完整代碼。 – NorthCat

回答

0

我可以做一個假設。目前,符號'□'和'■' - Unicode的符號。你可以是這樣的十六進制代碼:

import binascii 
print (binascii.hexlify(bytes('□','UTF-8'))) #b'e296a1' 
print (binascii.hexlify(bytes('■','UTF-8'))) #b'e296a0' 

您可以找到的Unicode表here。 由於某種原因您的控制檯無法顯示Unicode字符。但你可以在控制檯編碼中找到它們的等價物:

for i in range(256): 
    print (i,chr(i)) 

記住每個正方形的值爲i。那麼你可以這樣做:

BLACK_SQUARE = ord(some_integer_value) 
WHITE_SQUARE = ord(some_integer_value) 

lineC = [WHITE_SQUARE if x=='0' else BLACK_SQUARE for x in lineC]