问题。
我正在使用基于 Sublime Text 3 构建的 Python 2.7,并且在打印时遇到问题。
在某些情况下,我得到的输出非常混乱'\uFFFD'
- the 'REPLACEMENT CHARACTER'
.
例如:
print u'\ufffd' # should be '�' - the 'REPLACEMENT CHARACTER'
print u'\u0061' # should be 'a'
-----------------------------------------------------
[Finished in 0.1s]
顺序颠倒后:
print u'\u0061'
print u'\ufffd'
-----------------------------------------------------
a
�
[Finished in 0.1s]
因此,Sublime 可以打印出“�”字符,但由于某种原因在第一种情况下不会这样做。
输出对语句顺序的依赖似乎很奇怪。
一般来说,替换字符的问题会导致非常不可预测的打印输出行为。
例如,我想打印带有错误替换的解码字节:
cp1251_bytes = '\xe4\xe0' # 'да' in cp1251
print cp1251_bytes.decode('utf-8', errors='replace')
-----------------------------------------------------
��
[Finished in 0.1s]
让我们替换字节:
cp1251_bytes = '\xed\xe5\xf2' # 'нет' in cp1251
print cp1251_bytes.decode('utf-8', errors='replace')
-----------------------------------------------------
[Finished in 0.1s]
并添加一条打印语句:
cp1251_bytes = '\xed\xe5\xf2' # 'нет' in cp1251
print cp1251_bytes.decode('cp1251')
print cp1251_bytes.decode('utf-8', errors='replace')
-----------------------------------------------------
нет
���
[Finished in 0.1s]
下面是一些其他测试用例的实现说明:
总结,所描述的打印输出行为有以下模式:
这取决于偶数/奇数'\ufffd'
打印语句中的字符
这取决于打印语句的顺序
这取决于具体的构建运行
我的问题:
为什么会出现这种情况?
如何解决这个问题?
我的 Python 2.7 sublime-build 文件:
{
"cmd": ["C:\\_Anaconda3\\envs\\python27\\python", "-u", "$file"],
"file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
"selector": "source.python",
"env": {"PYTHONIOENCODING": "utf-8"}
}
与 Anaconda 分开安装的 Python 2.7 的行为是完全相同的。