从命令提示符到Python I / O和用户输入时,有什么好的策略?

时间:2015-06-29 17:06:47

标签: python unicode utf-8 io character-encoding

我最近吓坏了,因为我花了一周的时间写了一个完全没用的pyton模块,它将一些空间数据转换成.csv格式。

我没有处理空间数据的问题,但是当软件运行时,我要求用户从命令提示符或cygwin提交一些输入。经过大量的努力和谷歌搜索,我得到它以某种方式使用UTF-8。

我做出妥协只使用英语而不是(希腊语)我需要但现在我得到关于英语的错误!看一下错误:

Please respond with 'yes' or 'no' or 'y' or 'n').
Would you like to add trips to the route with id ''no5leho'' and direction 0?
[y/n] y
Traceback (most recent call last):
File "main.py", line 296, in <module>
inputAddTrips = query_yes_no('Would you like to add trips to the route with id \'\'%s\'\' and direction 0?\r\n' % (i))
File "main.py", line 33, in query_yes_no
choice = input().lower()
File "C:\Python34\lib\codecs.py", line 319, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xcf in position 0: invalid continuation byte

我尝试过各种各样的尝试,例如将PYTHONIOENCODING系统变量设置为utf-8和.encoding解码每一个打印和输入()。

我用过

#!/usr/bin/env python

# -*- coding: utf-8 -*-

但没有任何反应?我仍然得到那些错误!所以我想问一下你们在输入和输出方面做了什么?我是初学者,但我知道大型网站和软件是用Python制作的,所以必须有办法避免所有这些错误!!

3 个答案:

答案 0 :(得分:0)

这不是希腊语或英语。这是一般的编码。如果用户提交了来自系统的编码。很可能它既不是UTF-8,也不是ASCII。您的错误是“无效的继续字节”,表示ISO-8859-1。也许这个步骤会有所帮助吗? UnicodeDecodeError, invalid continuation byte

答案 1 :(得分:0)

python: how to convert a string to utf-8,您可以转换为unicode并将编码指定为utf-8,如果失败,您可以告诉python忽略它无法转换为utf的字符串部分-8有一些基本的错误处理。

答案 2 :(得分:0)

不要惹恼PYTHONIOENCODING。它使Python输出一个特定的编码忽略了控制台实际支持的内容,并在使用命令shell将Python输出重定向到特定编码的文件时使用。

Windows游戏机不能很好地使用UTF-8。既然你想要希腊语,你的代码页是什么?代码页737是希腊语编码。您还需要一个支持希腊字符的控制台字体。我使用的是Consolas字体。

我在美国Windows上默认使用代码页437.切换到希腊语:

C:\>chcp 737
Active code page: 737

显示代码页支持的所有字符:

C:\>py
Python 3.3.5 (v3.3.5:62cf4e77f785, Mar  9 2014, 10:35:05) [MSC v.1600 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> bytes(range(256)).decode('cp737')
'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\
x1f !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7fΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠ
ΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρσςτυφχψ░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ωάέήϊίόύϋώΆΈΉΊΌΎΏ±≥≤ΪΫ÷≈°∙·√ⁿ²■\xa0'

使用希腊字符请求输入。我只是剪切并粘贴了一些支持的字符,但如果您的Windows配置为希腊文,您应该能够直接输入:

>>> input('Greek? ')
Greek? ΡΣΤΥΦΧΨΩαβγδεζηθ
'ΡΣΤΥΦΧΨΩαβγδεζηθ'
>>>

另一种选择是跳过使用Windows控制台并获得支持UTF-8的体面Python IDE。