2013-10-13 3 views
1

У меня есть китайская строка «普 派», которую я хочу передать с клиента на веб-сервер, используя HTTP POST-запрос. На стороне клиента, я использую следующий код JQuery:Ошибка конверсии между JSON для китайских иероглифов

$.ajax({ 
    url: 'http://127.0.0.1:8000/detect/word', 
    type: 'POST', 
    data: JSON.stringify('普派'), 
    success: function(msg) { 
     alert(msg); 
    } 
}); 

На стороне сервера, я использую Python 3.3:

class DictRequestHandler(BaseHTTPRequestHandler): 
    def do_POST(self): 
     post_data = self.rfile.read(int(self.headers['Content-Length'])) 
     post_var = json.loads(post_data.decode()) 

Но результат (post_var) грязен. Переменная post_data типа bytes: b '"\ xc3 \ xa6 \ xe2 \ x84 \ xa2 \ xc2 \ xae \ xc3 \ xa6 \ xc2 \ xb4 \ xc2 \ xbe"', но для правильного преобразования это должно быть b '' \ u666e \ u6d3e "'(получена json.dumps("普派").encode()). Не могли бы вы помочь мне решить эту проблему? Большое спасибо.

ответ

2

Результат JSON.stringify('普派') зависит от кодировки исходного файла. Помните, что между этими кавычками действительно просто куча байтов, это просто ваш редактор (или браузер), который отображает его как «普 派».
Если браузер правильно определяет исходную кодировку, то это не должно иметь значения, но если это не так, то в конечном итоге вы получите мусор.
Поэтому обязательно поставьте правильную кодировку файла (которая должна быть предпочтительно utf-8).

Чтобы быть независимым от таких интерпретаций, зависящих от браузера, попробуйте изменить его на JSON.stringify("\u666e\u6d3e").

В стандарте json не указывается, что символы юникода должны быть заменены на escape-последовательность teir unicode при кодировании. Он просто определяет, что кодировка should be unicode и допускает «любой символ Юникода» в json-строках, поэтому результат JSON.stringify не является неправильным, если он кодирует данные символы как utf-8.
Любой должен быть в порядке, поэтому то, что вы должны увидеть на своей стороне сервера, должно быть, должно быть b'"\xe6\x99\xae\xe6\xb4\xbe"'.

+0

Я сохраняю файл html как кодировку utf-8 и проверяю его с помощью команды -bi, я также добавляю «contentType:» text/plain; charset = utf-8 »,« в вызове функции $ .ajax, но эта же проблема сохраняется - я всегда получал неправильный \ xc3 \ xa6 \ xe2 \ x84 \ xa2 \ xc2 \ xae \ xc3 \ xa6 \ xc2 \ xb4 \ xc2 \ xbe. Я не могу использовать JSON.stringify ("\ u666e \ u6d3e"), потому что jquery не знает, как преобразовать 普 派 в \ u666e \ u6d3e (я получил его с помощью python) или \ xe6 \ x99 \ xae \ xe6 \ xb4 \ XBE. Дело в том, что используется кодировка JSON.stringify для преобразования 普 派 в \ xc3 \ xa6 \ xe2 \ x84 \ xa2 \ xc2 \ xae \ xc3 \ xa6 \ xc2 \ xb4 \ xc2 \ xbe? как это проверить? – user2384994

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