向下箭头(↓
)是CP437编码中的有效字符。我正在编写一个需要用这种编码读写文件的程序,但是当我试图将包含这个字符的字符串写入文件时,我会收到以下错误:
File "C:\Python34\lib\encodings\cp437.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_map)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u2193' in position 0: character maps to <undefined>
对于其他CP437字符,例如↔
,也会发生同样的情况。我的代码在下面,万一我做了什么蠢事.
ENCODING = 'CP437'
def writeFile(name, text):
f = open(name, 'w', encoding = ENCODING)
f.write(text)
f.close()
根据Wikipedia,它在指定的编码中是有效的,那么python为什么不告诉我呢?我怎么才能解决这个问题?
发布于 2016-11-12 14:57:18
链接到的Wiki页面上写着(就在将向下箭头显示为0x19
的表的上方):
尽管ROM为所有256种不同的8位代码提供了一个图形,但是一些API不会打印一些代码点,特别是范围1-31和127的代码。相反,他们会将它们解释为控制字符。例如,在原始IBM上输出文本的许多方法都会解释BEL、BS、CR和LF的代码。许多打印机也无法打印这些字符。
您要编码的字符,即向下箭头,与ASCII控制字符EM
(媒体结束)相同。它在旧程序中的意义将取决于上下文。在Python中,上述引号(1-31和127)中提到的字符总是被解释为控制字符,而不是可打印字符。
发布于 2016-11-12 13:48:38
对我来说是个谜,但这能满足你的需要吗?
f = open('somethin.txt', 'wb')
s1 = ( chr(8595)+chr(8593)+chr(8592)+chr(8594) ) . encode ( 'utf-8' )
s2 = '↓↑←→' . encode ( 'utf-8' )
f.write( s1 )
f.write( s2 )
f.close()
s1和s2是相同的字节字符串。
https://stackoverflow.com/questions/40567325
复制相似问题