如何制作python 3打印('\ ufeff')

时间:2012-05-07 11:50:56

标签: printing python-3.x

>>> 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'

但是太长了,我还能做什么呢?

英语真难写,有木有?这坛子有国人么?帮老弟一帮啊..

2 个答案:

答案 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'将其编码为二进制格式。