&引用;返回编解码器.charmap“u encode”;运行没有异常字符的python脚本时
我试图在CMD中运行我的脚本(它在空闲状态下工作正常),但出现以下错误:&引用;返回编解码器.charmap“u encode”;运行没有异常字符的python脚本时,python,windows,encoding,cmd,python-idle,Python,Windows,Encoding,Cmd,Python Idle,我试图在CMD中运行我的脚本(它在空闲状态下工作正常),但出现以下错误: C:\Python34>rule90.py 回溯(最近一次呼叫最后一次): 文件“C:\Python34\rule90.py”,第15行,在 印刷品(c) 文件“C:\Python34\lib\encodings\cp850.py”,第19行,编码 返回codecs.charmap\u encode(输入、自身错误、编码\u映射)[0] UnicodeEncodeError:“charmap”编解码器无法对位置0-39中的
C:\Python34>rule90.py
回溯(最近一次呼叫最后一次):
文件“C:\Python34\rule90.py”,第15行,在
印刷品(c)
文件“C:\Python34\lib\encodings\cp850.py”,第19行,编码
返回codecs.charmap\u encode(输入、自身错误、编码\u映射)[0]
UnicodeEncodeError:“charmap”编解码器无法对位置0-39中的字符进行编码:字符映射到
虽然我在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=['0','0','0','0','0','0','1','0','0','0','0','0','0','0']
lineB=lineA[:]
lineC=lineA[:]
lineC=['□' 如果x=='0'其他'■' 对于第c行中的x]
counth=0
最大计数=len(lineA)-2
countv=0
最大计数v=len(lineA)/2-1
当countv
lineA
通常是一个较长的列表(25+个数字),但为了节省空间,我缩短了它。我可以做一个假设。目前,这两个符号都是□' 而且■'- Unicode的符号。您可以得到如下十六进制代码:
import binascii
print (binascii.hexlify(bytes('□','UTF-8'))) #b'e296a1'
print (binascii.hexlify(bytes('■','UTF-8'))) #b'e296a0'
您可以找到Unicode表。
由于某些原因,您的控制台无法显示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]
请发布脚本的完整代码。