Добрый день. Есть простой скрипт, одна часть передаёт данные из формы через GET. Другая парсит url и забирает оттуда эти данные. Проблема в том, что кириллические символы не обрабатываются как положено - не работает upper, например. И если раньше я побеждал такое при помощи decode('utf-8'), то на сервере ни decode, ни encode, ни другие способы не помогают.
Хост расположен у OpenShift.
Linux version 2.6.32-573.7.1.el6.x86_64 (mockbuild@x86-031.build.eng.bos.redhat.com) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-16)
LANG=en_US.UTF-8
Python 2.7.8
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
virtenv = os.environ['OPENSHIFT_PYTHON_DIR'] + '/virtenv/'
virtualenv = os.path.join(virtenv, 'bin/activate_this.py')
try:
execfile(virtualenv, dict(__file__=virtualenv))
except IOError:
pass
#
# IMPORTANT: Put any additional includes below this line. If placed above this
# line, it's possible required libraries won't be in your searchable path
#
import urlparse
def application(environ, start_response):
ctype = 'text/plain'
if environ['PATH_INFO'] == '/health':
response_body = "1"
elif environ['PATH_INFO'] == '/env':
response_body = ['%s: %s' % (key, value)
for key, value in sorted(environ.items())]
response_body = '\n'.join(response_body)
elif environ['PATH_INFO'] == '/' or environ['PATH_INFO'] == '/main':
ctype = 'text/html'
response_body = '''<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Welcome to OpenShift</title>
</head>
<body>
<form action="/justdoit" method="get">
<input type="text" name="name">
<input type="text" name="code">
<input type="submit" value="Send">
</form>
</body>
</html>'''
elif environ['PATH_INFO'] == '/justdoit':
ctype = 'text/html'
params = urlparse.parse_qs(environ.get('QUERY_STRING','utf-8'))
name = params.get('name', [''])[0]
code = str(params.get('code', [''])[0])
.......................... далее код опущен
status = '200 OK'
response_headers = [('Content-Type', ctype), ('Content-Length', str(len(response_body)))]
start_response(status, response_headers)
return [response_body]
#
# Below for testing only
#
if __name__ == '__main__':
from wsgiref.simple_server import make_server
httpd = make_server('localhost', 8051, application)
# Wait for a single request, serve it and quit.
httpd.handle_request()