Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
已部署Python应用程序中的Unicode错误_Python_Eclipse_Sqlite_Python 2.7_Unicode - Fatal编程技术网

已部署Python应用程序中的Unicode错误

已部署Python应用程序中的Unicode错误,python,eclipse,sqlite,python-2.7,unicode,Python,Eclipse,Sqlite,Python 2.7,Unicode,我有一个简单的python/pyqt应用程序,它将数据插入SQLITE数据库表, 有些条目包含特殊字符,例如umlauts。 我使用eclipse进行了开发,对其进行了测试,并成功地插入了所有数据,没有任何错误。 然后我决定为我的应用程序创建一个可执行文件。我正在使用py2exe创建可执行文件。我的setup.py如下所示 from distutils.core import setup import py2exe import os includes=["sqlite3","sip","PyQ

我有一个简单的python/pyqt应用程序,它将数据插入SQLITE数据库表, 有些条目包含特殊字符,例如umlauts。 我使用eclipse进行了开发,对其进行了测试,并成功地插入了所有数据,没有任何错误。 然后我决定为我的应用程序创建一个可执行文件。我正在使用py2exe创建可执行文件。我的setup.py如下所示

from distutils.core import setup
import py2exe
import os
includes=["sqlite3","sip","PyQt4", "PyQt4.QtGui"]
excludes=[]
packages=[]
dll_excludes=['libgdk-win32-1.0-0.dll', 'libgobject-2.0-0.dll', 'tcl84.dll', 'tk84.dll']

setup(

      options={"py2exe": {"compressed": 2,
                          "optimize": 2,
                          "includes": includes,
                          "excludes": excludes,
                          "packages": packages,
                          "dll_excludes": dll_excludes,
                          "bundle_files": 2,
                          "dist_dir": "dist",
                          "xref": False,
                          "skip_archive": False,
                          "ascii": False,
                          "custom_boot_script": '',
                          }
               },
      windows=['MainWindow.py'],     
      )
只要我在“dist”文件夹中得到一个可执行的应用程序,它就可以工作,当我运行它时,它可以很好地加载,当我插入相同的数据时,它会在特殊字符(umlauts)处崩溃。在我成功插入的100个条目中有60个,第一次出现重音字符会导致可执行文件出现错误消息

(,UnicodeEncodeError('ascii', u'Citro\xebnCX',5,6',序号不在范围内(128),)

碰巧我把雪铁龙X插入了表格中,“e”是带法国口音的字符

我不知道为什么在eclipse环境中运行python/pyqt应用程序时没有出现错误,但一旦创建了一个可执行文件,就会出现这个错误

我应该在安装文件中做哪些更改
谢谢我应用了这个解决方案

 def setencoding():
    encoding = "ascii" 
    if 0:
        import locale
        loc = locale.getdefaultlocale()
        if loc[1]:
            encoding = loc[1]
    if 0: #changes comes here, change 0 to 1
        encoding = "undefined" #the encoding you want
    if encoding != "ascii":
        sys.setdefaultencoding(encoding)

这对我很有效。不是一个原始的解决方案,在上看到它,所以不同之处在于不同环境选择的默认编码。Unicode到stdin或stdout的任何I/O都将触发使用默认编码的编码或解码。如果该编码是
'ascii'
,则任何重音字符都将失败

您可以检查默认值以确保:

import sys
sys.getdefaultencoding()
sys.stdin.encoding
sys.stdout.encoding

要从等式中排除
py2exe
,可以尝试在控制台中运行
python MainWindow.py
,并将其与
python MainWindow.py>输出进行比较。前者可能成功,而后者可能失败。在系统范围的
site.py中手动修改预定义的
setencoding()
函数是一个可怕的想法。它改变了所有python脚本在系统上的工作方式,只是偶尔会破坏它们。许多脚本都不希望您进行更改。对程序中的随机破坏进行故障排除是一场噩梦,您甚至不知道这些程序是用Python实现的。不要这样做。改为修复代码。如果你不知道怎么做,谢谢。你的回答让我走上了正确的轨道。我最终研究了如何在Python中设置默认编码(setdefaultencoding()函数不存在)?