当前位置: 首页 > 知识库问答 >
问题:

将应用程序切换到Unicode

萧晔
2023-03-14

我的模特。py看起来像:

import csv

with open("organizationTest.txt","rU") as f:
        reader = csv.reader(f)
        for row in reader:
            _, created = Company.objects.get_or_create(
                Name=row[0],
                Site=row[1],
                )

模型中描述了“名称”和“站点”!

每当我尝试运行我的服务器时,我都会

django.db.utils.编程错误:除非使用可以解释8位字节串的text_factory(如text_factory=str),否则不得使用8位字节串。强烈建议您将应用程序切换到Unicode字符串

我怎样才能将我的应用程序切换到上面提到的Unicode字符串,或者如果有其他方法来解决这个问题,我很想知道!

我很乐意回答任何问题!提前谢谢你!

编辑:以下是完整错误:

回溯(最后一次调用):从命令行执行(sys.argv)文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/django/core/management/init.py”第338行命令行实用程序中的第10行文件“manage.py”。execute()文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/django/core/management/init.py”,第312行,在execute-django中。setup()文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/django/init.py”,第18行,在安装程序应用程序中。填充(settings.INSTALLED_APPS)文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/django/APPS/registry.py”,第108行,填充应用程序配置。导入_模型(所有_模型)文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site packages/django/apps/config.py”,第198行,导入_模型。models_module=import_module(models_module_name)文件“/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/init.py”,在import_module import(name)文件“/Users/aghodsib/Desktop/soroush_programming/Python/slik/companys/models.py”第58行,在description=row[15]文件中“/Library/Frameworks/Python。framework/Versions/2.7/lib/python2。7/站点包/django/db/models/manager。py”,第127行,在manager_方法中返回getattr(self.get_queryset(),name)(*args,**kwargs)文件“/Library/Frameworks/Python。framework/Versions/2.7/lib/python2。7/站点包/django/db/models/query。py”,第405行,在get_或_create return self.get(**lookup)中,假文件“/Library/Frameworks/Python。framework/Versions/2.7/lib/python2。7/站点包/django/db/models/query。py”,第328行,在get num=len(clone)文件“/Library/Frameworks/Python中。framework/Versions/2.7/lib/python2。7/站点包/django/db/models/query。py”,第144行,在len self.\u fetch\u all()文件“/Library/Frameworks/Python中。framework/Versions/2.7/lib/python2。7/站点包/django/db/models/query。py”,第965行,在文件“/Library/Frameworks/Python”中的“fetch\u all self.\u result\u cache=list(self.iterator())中。framework/Versions/2.7/lib/python2。7/站点包/django/db/models/query。py”,第238行,在迭代器results=compiler.execute_sql()File“/Library/Frameworks/Python中。framework/Versions/2.7/lib/python2。7/site-packages/django/db/models/sql/compiler。py”,第837行,在execute_sql cursor.execute(sql,params)文件“/Library/Frameworks/Python中。framework/Versions/2.7/lib/python2。7/站点包/django/db/backends/utils。py”,第79行,在execute return super(CursorDebugWrapper,self).execute(sql,params)文件“/Library/Frameworks/Python中。framework/Versions/2.7/lib/python2。7/站点包/django/db/backends/utils。py”,执行返回self.cursor.execute(sql,params)文件“/Library/Frameworks/Python中的第64行。framework/Versions/2.7/lib/python2。7/站点包/django/db/utils。py“,第97行,在出口六。重新放(dj_exc_类型,dj_exc_值,回溯)文件“/Library/Frameworks/Python。framework/Versions/2.7/lib/python2。7/站点包/django/db/backends/utils。py”,执行返回self.cursor.execute(sql,params)文件“/Library/Frameworks/Python中的第64行。framework/Versions/2.7/lib/python2。7/site-packages/django/db/backends/sqlite3/base。py“,第318行,在execute return Database.Cursor.execute(self,query,params)django.db.utils.ProgrammingError:除非使用可以解释8位bytestring的文本工厂(如text\u factory=str),否则不能使用8位bytestring。强烈建议您只将应用程序切换到Unicode字符串。

共有3个答案

庞鸿骞
2023-03-14

试试这个:

import csv

with open("organizationTest.txt","rU") as f:
        reader = csv.reader(f)
        for row in reader:
            _, created = Company.objects.get_or_create(
                Name=unicode(row[0]),
                Site=unicode(row[1]),
                )
邹野
2023-03-14

来自Python CSV文档:

csv模块不直接支持读取和写入Unicode,但它是8位的干净存储,用于解决ASCII NUL字符的一些问题。因此,只要避免像UTF-16这样使用NUL的编码,就可以编写函数或类来处理编码和解码。建议使用UTF-8。

下面的unicode_csv_reader()是一个生成器,它包装csv.reader来处理Unicode CSV数据(Unicode字符串列表)。

import csv

def unicode_csv_reader(unicode_csv_data, dialect=csv.excel, **kwargs):
    # csv.py doesn't do Unicode; encode temporarily as UTF-8:
    csv_reader = csv.reader(utf_8_encoder(unicode_csv_data),
                            dialect=dialect, **kwargs)
    for row in csv_reader:
        # decode UTF-8 back to Unicode, cell by cell:
        yield [unicode(cell, 'utf-8') for cell in row]

def utf_8_encoder(unicode_csv_data):
    for line in unicode_csv_data:
        yield line.encode('utf-8')


with open("organizationTest.txt","rU") as f:
        reader = unicode_csv_reader(f)
        for row in reader:
            _, created = Company.objects.get_or_create(
                Name=row[0],
                Site=row[1],
                )
周阳波
2023-03-14

您似乎从一个不寻常的编解码器中获取字符
csv文件的源应该能够告诉您他们在使用什么
但是,您可以这样从一个编解码器切换到另一个编解码器:

import csv

with open("organizationTest.txt","rU") as f:
        reader = csv.reader(f)
        for row in reader:
            _, created = Company.objects.get_or_create(
                Name=row[0].decode('latin-1').encode('utf8'),
                Site=row[1].decode('latin-1').encode('utf8'),
                )

我建议你试试看。如果仍然无法工作,请联系csv文件的创建者。

 类似资料:
  • 我最近在我的机器上安装了纱线,但以前使用npm。对于我目前的React项目,我想再次使用npm。 然而,如果我运行CreateReact应用程序,它是用纱线构建的。 如何切换以使其使用npm创建?

  • 我正在自动运行一个本机iOS应用程序,点击“向Facebook注册”后,Facebook应用程序将打开,用户可以在其中输入登录凭据。问题是,Facebook应用程序打开后,没有任何元素可以与之交互,尽管它们位于Appium inspector中。那么,在返回到原始应用程序之前,有没有办法切换到Facebook应用程序并与之交互? Appium版本:1.4.13 Mac OS X:10.11.4设备

  • 这似乎是一件很容易做到的事情,但无论出于什么原因,我都被打败了。 我试图使用Firebase工具CLI与我的数据库进行交互。我可以毫无困难地登录,当我键入时,我得到了我当前所有应用程序的列表。它还告诉我我目前连接到哪个应用程序。 我的问题是,我想连接到其他应用程序之一。我正在我的临时应用程序上运行查询,我需要在我的生产应用程序上运行它们。我可以在列表中看到生产应用程序,但我找不到任何方法切换到该应

  • 在我的主要活动中,我附加了两个片段并使用tablayout。每当我把光变暗或者把暗变亮,我都会得到这个错误,在这里输入图像描述 错误显示在super的onCreate()中。onCreate(savedInstanceState)main活动。

  • 我需要知道如何改变上下文,如果有可能在原生windows桌面应用程序和浏览器之间切换,以及如何做到这一点。

  • 我有一个测试用例,在iPhone中我必须1。在app a.2中执行一个任务。切换到Safari浏览器并执行任务3。再次切换回应用程序A并继续其他任务 目前,我可以执行1&2&然后切换回应用程序A,但从safari浏览器切换后,我不能在应用程序A中执行任何任务。我所做的如下。 为了从我的应用程序切换到Safari,我使用以下代码启动了一个新的会话来切换到Safari 现在的问题是再次从safari浏