-1

使用 pymongo 我无法处理带有 ñ 或 é 等特殊字符的插入。我添加了我的代码和调用我的 python 脚本的错误

# -*- coding: utf-8 -*-
import sys
import pymongo
import codecs

UTF8Writer = codecs.getwriter('utf8')
sys.stdout = UTF8Writer(sys.stdout)


class item(object):
    def __init__(self, categoria, nombre, cantidad, foto, comentario):
        self.categoria = categoria
        self.nombre = nombre
        self.cantidad = cantidad
        self.foto = foto
        self.comentario = comentario

    def getItem(self):
        return {'categoria':self.categoria, 
                'nombre':self.nombre, 
                'cantidad':self.cantidad, 
                'foto':self.foto, 
                'comentario':self.comentario}

def main():
    mongodb_uri = 'mongodb://localhost:27017'
    db_name = 'inventario'
    try:
        connection = pymongo.Connection(mongodb_uri)
        database = connection[db_name]
    except:
        print('Error: Unable to connect to database.')
        connection = None
    if connection is not None:      
    continuar = True
    while continuar:

        categoria = raw_input('Categoria: ')
        nombre = raw_input('Nombre: ')
        cantidad = raw_input('Cantidad: ')
        foto = raw_input('Foto: ')
        comentario = raw_input('Comentario: ')
        a = item(categoria, nombre, cantidad, foto, comentario)
        #print a.getItem()
        database.equipo.insert(a.getItem())
        c = str((raw_input('Otro objeto S/N: ').lower()))
        if c == 'n':
            continuar = False
main()


C:\Users\felipillo\Documents\GitHub\Inventario>python inventario.py
Categoria: Biología
Nombre: Modelo Riñón
Cantidad: 2
Foto:
Comentario:
Traceback (most recent call last):
  File "inventario.py", line 49, in <module>
    main()
  File "inventario.py", line 45, in main
    database.equipo.insert(a.getItem())
  File "C:\Python27\lib\site-packages\pymongo-2.4.1-py2.7-win32.egg\pymongo\coll
ection.py", line 359, in insert
bson.errors.InvalidStringData: strings in documents must be valid UTF-8

C:\Users\felipillo\Documents\GitHub\Inventario>

4

1 回答 1

1

你可以试试这个:

enc = sys.stdin.encoding

categoria = raw_input('Categoria: ').decode(enc)
nombre = raw_input('Nombre: ').decode(enc)
cantidad = raw_input('Cantidad: ').decode(enc)
foto = raw_input('Foto: ').decode(enc)
comentario = raw_input('Comentario: ').decode(enc)
于 2012-12-12T01:47:53.220 回答