Проблема Unicode с SQLAlchemy

Когда я использую «in.readIntArray(storeID)», я получаю сообщение об ошибке:

«Причина: java.lang.NullPointerException at android.os.Parcel.readIntArray (Parcel.java:672) «.

Вместо «readIntArray» я использовал следующее:

storeID = in.createIntArray();

Теперь ошибок нет.

8
задан Dave Forgac 8 June 2009 в 21:51
поделиться

3 ответа

I found this article that helped explain my troubles somewhat:

http://www.amk.ca/python/howto/unicode#reading-and-writing-unicode-data

I was able to get the desired results by using the 'codecs' module and then changing my program as follows:

When opening the file:

infile = codecs.open(filename, 'r', encoding='iso-8859-1')

When printing the location:

print location.encode('ISO-8859-1')

I can now query and manipulate the data from the table without the error from before. I just have to specify the encoding when I output the text.

(I still don't entirely understand how this is working so I guess it's time to learn more about Python's unicode handling...)

11
ответ дан 5 December 2019 в 06:38
поделиться

Из sqlalchemy.org

См. Раздел 0.4.2

добавлен новый флаг в строку и create_engine (), assert _unicode = (Истина | Ложь | 'предупреждать' | Нет). По умолчанию Ложь или Нет на create _engine () и String, 'предупреждать' о типе Unicode. когда Верно , приводит к тому, что все операции преобразования Unicode вызывают исключение, когда Строка байтов, отличная от Unicode, передается как параметр привязки. предупредить результаты в предупреждении. Настоятельно рекомендуется, чтобы все, поддерживающие Unicode Приложения правильно использовать объекты Unicode Python (например, u'hello ', а не 'Привет') так что данные возвращаются точно.

Я думаю, вы пытаетесь ввести байтовую строку, отличную от Unicode. Возможно, это может привести вас на верный путь? Нужна какая-то форма обращения, сравните «привет» и «привет».

Ура

7
ответ дан 5 December 2019 в 06:38
поделиться

Попробуйте использовать тип столбца Unicode, а не String для столбцов Unicode:

Base = declarative_base()
class Point(Base):
    __tablename__ = 'points'

    id = Column(Integer, primary_key=True)
    pdate = Column(Date)
    ptime = Column(Time)
    location = Column(Unicode(32))
    weather = Column(String(16))
    high = Column(Float)
    low = Column(Float)
    lat = Column(String(16))
    lon = Column(String(16))
    image = Column(String(64))
    caption = Column(String(64))

Изменить: Ответ на комментарий:

Если вы получаете предупреждения о кодировках Unicode, то есть два вещи, которые вы можете попробовать:

  1. Преобразуйте свое местоположение в Unicode. Это будет означать, что ваша точка будет создана следующим образом:

    newpoint = Point (имя файла, pdate, ptime, unicode (location), weather, high, low, lat, lon, image, caption)

    Преобразование Unicode произведет строка Unicode при передаче либо строки, либо строки Unicode, поэтому вам не нужно беспокоиться о том, что вы передаете.

  2. Если это не решает проблемы с кодировкой, попробуйте вызвать encode для ваших объектов Unicode. Это означало бы использовать такой код:

    newpoint = Point (filename, pdate, ptime, unicode (location) .encode ('utf-8'), weather, high, low, lat, lon, image, caption)

    Этот шаг, вероятно, не понадобится, но он, по сути, преобразует объект Unicode из кодовых точек Unicode в конкретное байтовое представление (в данном случае utf-8). Я ожидал, что SQLAlchemy сделает это за вас, когда вы передадите объекты Unicode, но это не может быть.

7
ответ дан 5 December 2019 в 06:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: