向下箭头(↓
)是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()
根据维基百科,它在指定的编码中有效,那为什么python告诉我呢?我该如何解决这个问题?
答案 0 :(得分:1)
您链接到的Wiki页面(位于显示向下箭头为0x19
的表格上方):
尽管ROM为所有256种不同的8位代码提供了图形,但某些API不会打印某些代码点,特别是1-31范围和127处的代码。相反,它们会将它们解释为控制字符。例如,许多在原始IBM PC上输出文本的方法将解释BEL,BS,CR和LF的代码。许多打印机也无法打印这些字符。
您尝试编码的字符(向下箭头)与ASCII控制字符EM
(中等结束)的字符相同。它在旧程序中意味着什么取决于背景。在Python中,上面引用(1-31和127)中提到的字符始终被解释为控制字符,而不是可打印的字符。
答案 1 :(得分:0)
对我来说是一个谜,但这会做你需要的吗?
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 是相同的字节字符串。