我试过了io
,repr()
等等,它们不起作用!
输入问题å
( \xe5
):
(这些都不起作用)
import sys
print(sys.stdin.read(1))
sys.stdin = io.TextIOWrapper(sys.stdin.detach(), errors='replace', encoding='iso-8859-1', newline='\n')
print(sys.stdin.read(1))
x = sys.stdin.buffer.read(1)
print(x.decode('utf-8'))
他们都给我粗略的UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe5 in position 0: unexpected end of data
还尝试使用以下命令启动 Python:export PYTHONIOENCODING=utf-8
也不起作用。
现在,这就是我所在的位置:
import sys, codecs
sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())
sys.stdin = codecs.getwriter("utf-8")(sys.stdin.detach())
x = sys.stdin.read(1)
print(x.decode('utf-8', 'replace'))
这给了我:�
它很接近......
我怎样才能\xe5
把它变成å
我的控制台?没有它input()
也会破坏,因为这个解决方案会破坏它。
注意:我知道以前有人问过这个问题,但没有一个能解决它.. 尤其是 io
我的系统的一些信息
os.environ['LANG'] == 'C'
sys.getdefaultencoding() == 'utf-8'
sys.stdout.encoding == 'ANSI_X3.4-1968'
sys.stdin.encoding == 'ANSI_X3.4-1968'
我的操作系统:ArchLinux
运行xterm
Runninglocale -a
给了我:C | POSIX | sv_SE.utf8
我遵循了这些:
- Python 3:如何指定标准输入编码
- http://python-notes.curiousefficiency.org/en/latest/python3/binary_protocols.html
- http://wolfprojects.altervista.org/talks/unicode-and-python-3/
- http://getpython3.com/diveintopython3/strings.html
- Python 3 - 编码/解码与字节/字符串
- 如何在 Python 3 中设置 sys.stdout 编码?
- http://docs.python.org/3.0/howto/unicode.html
(还有 50 多个)
解决方案(有点,仍然中断input()
)
sys.stdout = codecs.getwriter("latin-1")(sys.stdout.detach())
sys.stdin = codecs.getwriter("latin-1")(sys.stdin.detach())
x = sys.stdin.read(1)
print(x.decode('latin-1', 'replace'))