Доброго времени суток!
Питоном пользуюсь редко, но возникла необходимость запустить простенькую REST API, чтобы забирать с сервера данные.
Так вот, практически каждый раз когда я использую Python для чего-либо, у меня возникают проблемы с кодировками. В данном случае - KOI8-R.
Дело в том, что на серваке откуда забираем данные - база в KOI8-R. Как на питоне правильно конвертировать из KOI8-R в UTF-8? Например, я забирают такие данные в json: {'data': [{'fio': 'é×ÁÎÏ× áÌÅËÓÁÎÄÒ ÷ÌÁÄÉÍÉÒÏ×ÉÞ', 'id': 23232, 'login': 'puhlik'}]} или в raw fio = "\u00eb\u00cf\u00da\u00cc\u00d1\u00ce\u00cb\u00cf \u00f2\u00cf\u00cd\u00c1\u00ce \u00e9\u00cf\u00d3\u00c9\u00c6\u00cf\u00d7\u00c9\u00de"
Как мне обработать fio, чтобы получить нормальное "Иванов Александр Владимирович" в utf-8. Пробовал encode и decode - ничего не получается.
#!/usr/bin/env python3
from flask import Flask, request, jsonify
from flask_restful import Resource, Api
from sqlalchemy import create_engine
from json import dumps
db_connect = create_engine('mysql://root:passwd@localhost/my_database', encoding='koi8-r')
app = Flask(__name__)
api = Api(app)
class Users(Resource):
def get(self, user_id):
conn = db_connect.connect()
query = conn.execute("SELECT id, login, fio FROM user WHERE id=%d " %int(user_id))
result = {'data': [dict(zip(tuple (query.keys()), i)) for i in query.cursor]}
return jsonify(result)
api.add_resource(Users, '/users/<int:user_id>')
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8088, threaded=True, debug=True)
Клиент:
from urllib import request
import json
from sys import argv
with request.urlopen("http://server.ru:8088/users/{0}".format(argv[1])) as url:
data = json.loads(url.read().decode())
print(data['data'][0]['fio'])