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

但是太长了,还有什么我能简单完成的

英语真难写,有木有?这坛子有国人么?帮老弟一帮啊。。</p>

4

2 回答 2

1

'\ufeff' 是具有特殊含义的不可打印的 Unicode 字符。当使用两字节整数时,它用作 UTF-16 BOM(字节顺序标记)来检测内存中存储的字节顺序(稍后写入文件)。当在文件开头找到时,它应该只有助于检测硬件存储小整数的方式,然后应该忽略它。

查看http://en.wikipedia.org/wiki/Byte_order_mark了解更多详情。

于 2012-05-07T21:39:33.193 回答
0

您似乎正在尝试将 Unicode 字符打印到不支持该字符的终端。这样做基本上是不可能的。也可能是有问题的字符应该是 GBK 编码的一部分,但是 Python 实现有一个错误。

您使用 gb2312 打开标准输出的第一个解决方案表明,如果您只是更改它的编码,终端本身确实支持该字符。这应该以某种方式作为操作系统中的设置是可行的。这可能是最适合您的解决方案。如果可以,请切换到 UTF-8 或 UTF-16。它们应该支持所有 Unicode 字符。

否则,您所能做的就是在打印之前尝试将字符从打印的内容中过滤掉,或者使用errors='ignore'or将其编码为二进制errors='replace'

于 2012-05-07T13:17:07.837 回答