UnicodeEncodeError:脚本在Spyder和IDLE上运行,但不在cmd提示符下运行

时间:2016-07-24 07:24:29

标签: python unicode

我手头有一个工作脚本,而它在Spyder IDE和python shell上运行,当我通过双击运行它时,它立即关闭。为了解这个问题,我通过cmd提示符运行它并遇到以下内容:

SELECT ROW_NUMBER() OVER(ORDER BY SalesYTD DESC) ROW_NUM, * FROM MYTABLE

之前已经多次询问过这个问题,但为什么我要问的是,这个脚本在某些计算机上工作正常,只需双击,但对我的工作不起作用。从我收集的内容来看,这可能与我的计算机是英文的事实有关,但能够运行的计算机是土耳其语?

此外,由于程序有许多土耳其语字符串,我宁愿不要弄乱每一个字符串,而是将一个东西放在顶部或其他东西。我甚至准备设置一个批处理文件来运行UTF8中的脚本。或者,如果我可以以识别UTF8的方式冻结它(这将是首选)?此外,我刚刚检查过,如果删除了所有的土耳其字符,程序也能正常工作。正如所料。

如果有任何帮助,Spyder仍然运行Python 3.5.1,我安装了3.5.2,当我在命令提示符下输入“python”时,Python 3.5.2运行得很好。

以下是代码,如果有任何帮助:

Traceback (most recent call last):
File "C:\Users\Cheese\Desktop\demografik-proje\demo-form-v-0-1-3.py", line 314, in <module>
mainMenu(q_list, xtr_q_list)
File "C:\Users\Cheese\Desktop\demografik-proje\demo-form-v-0-1-3.py", line 152, in mainMenu
patient_admin = input("Testi uygulayan ki\u015fi: ") #the person who administrated the test
File "C:\Program Files\Python35\lib\encodings\cp850.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: 'charmap' codec can't encode character '\u015f' in position 18: character maps to <undefined>

2 个答案:

答案 0 :(得分:0)

好的,找到了解决方案,想知道我是如何错过这个的(考虑到我试图将这个问题弄清楚了2-3个小时)。

要使用非ASCII字符串运行程序,可以更改命令提示符的代码页。要做到这一点: 打开Windows控制面板 选择地区和语言 单击“管理”选项卡 在“非Unicode程序的语言”下,单击“更改系统区域设置” 选择区域设置(土耳其语为我的情况) 单击“确定”

它将重新启动您的计算机,之后,您的程序应该可以正常工作。

来源:https://jsfiddle.net/tmaLjsvu/1/

答案 1 :(得分:0)

带有字符串参数的

input执行print,而众所周知,PrintFails

Windows命令提示符在Unicode处无可救药地被破坏。您可以将其使用的代码页更改为包含要打印的字符的代码页,例如在运行Python脚本之前使用命令chcp 1254进行旧版土耳其语编码code page 1254。通过设置“非Unicode程序的语言”,您将此代码页设置为所有命令提示的默认值。

但是,如果您需要使用1254中不存在的字符,这仍然会失败。理论上,@ PM2Ring建议您可以使用代码页65001(几乎是UTF-8),但在实践中长期存在Windows的代码页实现中的错误通常会使其无法使用。

您也可以尝试安装win-unicode-console模块,该模块会尝试解决Windows命令提示符的问题。