механизм приложений Google отображает Unicode по-разному в объектах StringProperty v StringListProperty? - PullRequest
0 голосов
/ 22 июня 2010

У меня есть mRegion db.StringProperty (), который установлен на некоторый корейский текст.Я вижу в своей панели инструментов, что это значение на корейском языке выглядит следующим образом:

한국: 충청남도

Однако, когда я беру это поле и добавляю его в свойство списка строк (db.StringListProperty ()) Я получаю что-то вроде этого:

\ ud55c \ uad6d: \ ucda9 \ uccad \ ub0a8 \ ub3c4

У меня возникают проблемы с отображением этого текста на моем клиенте, когда у меня есть эта строкаВывести значение свойства списка клиенту, поэтому мне интересно, если что-то не так на стороне сервера при сохранении значения (как я ожидаю, что оно будет читаемым корейским, как StringProperty).

Кто-нибудь знаетгде я могу ошибаться или это второе отображение просто нормально в объектах со списком строк, и проблема, скорее всего, на стороне моего клиента?

Спасибо.

Обновление с более подробной информацией оПроблемы: Мой клиент - приложение для iPhone.В основном, я использую iPhone, чтобы получить информацию о местоположении пользователя в gps, используя обратный геокодер api.Я отправляю это в движок приложения и сохраняю его.Эта часть, кажется, работает, потому что для Кореи я вижу корейские символы.В общем, название региона получается следующим образом:

region = self.request.get('region')
entry.init(region)
...
self.mRegion = region

довольно просто (и это работает).

Когда это происходит, я получаю эти данные и отправляю их обратноклиент.Подводя итог:

query = db.GqlQuery("SELECT * FROM RegionData WHERE mLatitudeCenter >= :1 and mLatitudeCenter <= :2", latmin, latmax)
for entry in query:
        output += entry.mRegion + ','
self.response.out.write(output)

Когда я беру это и кладу на UILabel в клиенте, оно искажается.Кроме того, когда я беру искаженное значение в клиенте и отправляю его назад на сервер для поиска региона, это дает сбой, и это наводит на мысль, что вместо отправки корейского текста, возможно, он передает отчет() символы или что-то.Если, как вы говорите, это просто вопрос представления, а не самих данных, то, возможно, это связано с системным шрифтом, который я использую для отображения этих данных?Я думал, что где-то мне не хватает правильного вызова encode () или decode (), но я не уверен.

1 Ответ

1 голос
/ 22 июня 2010

Вполне возможно, что интерфейс администратора отображает их по-разному, да. В последнем случае он явно делает repr (s), в то время как в первом он просто печатает строку.

Интерфейс интерфейса администратора не влияет на то, как работает ваш код - и Strings, и StringLists хранятся в хранилище данных одинаково и возвращаются в виде строк Unicode, чтобы вы могли работать с ними по своему усмотрению.

Я настоятельно рекомендую прочитать этот пост Джоэла о программном обеспечении о Unicode . Короче говоря, вы имеете дело с двумя видами вещей: двоичные данные и символы Юникода. Чтобы сбить вас с толку, Python выставляет их как строки - 'unicode strings' и 'raw strings', соответственно, но вы должны рассматривать первые только как фактические строки.

Хранилище данных с его StringListProperty и StringProperty сохраняет и возвращает строки Unicode. Ваш фреймворк также должен давать вам строки Unicode и принимать строки Unicode обратно, но некоторые плохо разработанные фреймворки этого не делают.

Что вам нужно сделать, это убедиться, что вы используете строки Unicode везде, где имеете дело с текстом, что вы явно вызываете .encode () для преобразования строки Unicode в необработанную строку и .decode () для преобразования необработанной строки в строку Юникода, и что кодировка символов в возвращенном ответе установлена ​​правильно, и вы кодируете свои строки, используя ту же кодировку. Как вы это сделаете, будет зависеть от вашей структуры.

Как только вы это сделаете, если у вас все еще будут проблемы, я бы предложил написать несколько простых модульных тестов - сохранить данные в хранилище данных, извлечь их и манипулировать ими, а затем проверить, соответствует ли это тому, что вы ожидаете, - чтобы определить, где проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...