>>> print('\ufeff')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'gbk' codec can't encode character '\ufeff' in position 0: illegal multibyte sequence
我知道
>>> stdout = open(1, 'w', encoding='gb2312', errors='ignore')
>>> print('\ufeff', file=stdout)
或
>>> print(repr('\ufeff'))
'\ufeff'
但是太长了,我还能做什么呢?
英语真难写,有木有?这坛子有国人么?帮老弟一帮啊..
答案 0 :(得分:1)
&#39; \ ufeff&#39;是具有特殊含义的不可打印的Unicode字符。当使用双字节整数时,它用作UTF-16 BOM(字节顺序标记)来检测存储在存储器中的字节顺序(稍后写入文件)。当在文件开头找到它时,它应该只有助于检测硬件存储小整数的方式,然后它应该被忽略。
有关详细信息,请查看http://en.wikipedia.org/wiki/Byte_order_mark。
答案 1 :(得分:0)
您似乎正在尝试将Unicode字符打印到不支持该字符的终端。这样做基本上是不可能的。它也可能是有问题的字符应该是GBK编码的一部分,但Python实现有一个错误。
使用gb2312打开stdout的第一个解决方案表明,如果您只是更改它的编码,终端本身就会支持该字符。这应该可以作为操作系统中的设置以某种方式。这可能是最适合您的解决方案。如果可以,请切换到UTF-8或UTF-16。它们应该支持所有Unicode字符。
否则,您只能尝试在打印前将字符从打印内容中过滤掉,或者使用errors='ignore'
或errors='replace'
将其编码为二进制格式。