То, что вы отправляете, похоже, является результатом кодирования url некоторых символов, выраженных в кодировке cp1254
(Windows Turkish) (или очень похожей кодировке ISO-8859-9
). Вы сказали "appengine", какую кодировку вы используете?
Нам нужно немного больше информации о "Все еще символы unicode, такие как" İşÇöÖü "пустые". Пустой, когда вы смотрите на них, как? Вместо
htmldata = urllib.unquote_plus(self.request.get('mdata'))
сделать это:
request_data = self.request.get('mdata')
htmldata = urllib.unquote_plus(request_data)
и отредактируйте свой вопрос, чтобы показать результаты repr(request_data)
и repr(htmldata)
Обновление Вы говорите, что self.request.get('mdata')
возвращает u'I\n\n'
... символы не-ASCII в ваших данных не возвращаются пустыми; они удалены .
Чей-то код удаляет не-ASCII символы. Что-то вроде your_input.decode(some_encoding, 'ignore')
с some_encoding
, установленным на ascii
или UTF-8
.
Покажите нам код, в котором вы "сказали, чтобы определить, какую кодировку я использую (iso-8859-9)".
Обновление 2 в ответ на публикацию отправляющего кода и этого комментария "Я добавляю # -*- coding: iso-8859-9 -*-
в начало".
Помещение «кодирования» в начало вашего исходного файла говорит компилятору Python о кодировке оставшейся части вашего исходного файла . Это не имеет ничего общего с кодировкой ваших данных . Вы можете удалить # coding и вместо записи 'mdata' : 'IıışŞşÖÖççç'
вы можете написать 'mdata' : 'I\xFD\xFD etc etc'
и получить ту же строку байтов, отправленную на сервер с тем же эффектом. Вы НЕ сообщили appengine, какую кодировку вы используете.
вместо
"Content-type": "application/x-www-form-urlencoded"
Я предлагаю вам попробовать это:
"Content-Type": "application/x-www-form-urlencoded; charset:ISO-8859-9;"