2013-03-30 2 views
1

Да, хорошо, поэтому у меня есть эта огромная проблема с кодировками, и я просто не знаю, как с этим бороться. После двух дней поиска Google я думаю, что у меня просто закончились варианты :)Юникод проблемы в Python

Что я хочу сделать, это следующее.

  1. Расположить текст в текстовом поле на веб-сайте
  2. Отправить текст на внутреннем интерфейсе (написанный на Python)
  3. Используйте текст, чтобы создать:
    а. Изображение в PIL.
    b. Запись в MySQL.

Теперь все это работает гладко, когда мы говорим о обычных персонажах. Но когда я пытаюсь использовать корейские, польские, японские символы, я получаю очень странные выглядящие символы, вставленные как в изображение, так и в базу данных. В приведенных ниже примерах я буду использовать трехсимвольную строку польских символов - «śść».

Вот что я сделал после Googling.

Поставлен следующее в .htaccess:

AddCharset UTF-8 .py .css .js .html 

Мой файл питон теперь начинается с:

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

Все мои базы данных MySQL кодируются в "utf8_unicode_ci".

Теперь, вот пример того, что я пытаюсь сделать ... Всякий раз, когда я анализирую «Asc» (три польских символов) оно сохраняется в базе данных и генерируется на изображении как:

ąść 

Теперь несколько проблем отладки. Я перехожу непосредственно к Python и назначаю следующую переменную (value_text1), которая обычно имеет свой синтаксический анализ текста (поэтому - без синтаксического анализа текста, просто установите фиксированный текст, чтобы сгенерировать изображение с помощью и поместить в базу данных):

A) Если я пойду с value_text1 = 'ąść', я получаю …ść.

B) Если я пойду с value_text1 = u'ąść' я получаю следующее сообщение об ошибке:

UnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-1: ordinal not in range(256)

C) Если я пойду с value_text1 = u'ąść'.encode('UTF-8') я получаю …ść в результате.

D) Если я согласен с value_text1 = u'\u0105\u015B\u0107'.encode('UTF-8'), где "\u0105\u015B\u0107" является фактическим кодом в формате Юникод для «śść», я получаю …ść.

Действительно не знаю, что я делаю неправильно - настройки сервера, настройки файла python, неправильная команда? Полюбите любые мысли, огромное спасибо заранее.

+1

Как вы передаете свой текст в PIL? – nneonneo

+0

Где вы можете получить это сообщение об ошибке? Что такое код, который вызывает это сообщение об ошибке? – BrenBarn

+0

Возможно, ваш редактор не сохраняет символ non-ascii в utf-8. – thkang

ответ

1

Если бы я попробовать его в интерактивной оболочке или из файла .py

#!/usr/bin/python 
# -*- coding: utf-8 -*- 
value_text1 = u'ąść' 
print value_text1 

она прекрасно работает хорошо для меня, так что я предполагаю, что это что-то с конфигурацией сервера.

BTW, при подключении к серверу обязательно используйте charset = "utf-8".

+0

Возможно, это ... вы знаете, где я могу попытаться найти эту конфигурацию? Это будет вещь Apache или .htaccess или что-то еще? – teeZee

+0

Предполагая, что вы используете модуль MySQLdb, просто добавьте charset = "utf-8" к вызову MySQLdb.connect() :) – jazzpi

+1

@teeZee: Или charset = "utf8", только что заметили, что ... – jazzpi

Смежные вопросы