JQuery публикует контент с неработающими символами UTF8 - PullRequest
0 голосов
/ 22 декабря 2010

У меня есть скрипт JQuery, который отправляет содержимое поля формы в простой сервлет. Когда я помещаю китайские иероглифы (в utf8) в поле формы и отправляю сообщения с помощью метода JQuery .ajax (), сервер видит символы в виде вопросительных знаков (欢迎 进入 智慧 的 十年 рассматривается как ?????????? на сервере).

$.ajax({ url: '/url-on-server', type: 'POST', data: 'action=SEND&'+ $('#text-field').val()), success: function(){}, dataType: 'json' }

Я проверил запрос с помощью FIREBUG и Liveheaders, и они выглядят правильно ...

Content-Type text/plain; charset=UTF-8

Я считаю, что это не относится к серверной части, когда я изменяю html-форму на публикацию без JQuery-скрипта, она прекрасно работает. Я вижу китайские иероглифы на стороне сервера, ничего не меняя на этой стороне.

Еще одна подсказка ..

Когда я публикую форму, используя метод JQuery $ .ajax (). Вот как выглядит запрос в LiveHeaders ...

action=SEND&msg=%E6%AC%A2%E8%BF%8E%E8%BF%9B%E5%85%A5%E6%99%BA%E6%85%A7%E7%9A%84%E5%8D%81%E5%B9%B4

Однако, когда я публикую форму традиционным способом web1.0, это то, что я вижу в живых заголовках.

action=SEND&msg=%26%2327426%3B%26%2336814%3B%26%2336827%3B%26%2320837%3B%26%2326234%3B%26%2324935%3B%26%2330340%3B%26%2321313%3B%26%2324180%3B

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

Заранее спасибо за помощь.

1 Ответ

0 голосов
/ 22 декабря 2010

Первый:

action=SEND&msg=%E6%AC%A2%E8%BF%8E%E8%BF%9B%E5%85%A5%E6%99%BA%E6%85%A7%E7%9A%84%E5%8D%81%E5%B9%B4

... - это экранированная от URL форма для строки:

action=SEND&msg=欢迎进入智慧的十年

Второй:

action=SEND&msg=%26%2327426%3B%26%2336814%3B%26%2336827%3B%26%2320837%3B%26%2326234%3B%26%2324935%3B%26%2330340%3B%26%2321313%3B%26%2324180%3B 

... - это экранированная от URL форма для строки UTF-8:

action=SEND&msg=欢迎进入智慧的十年

Полагаю, эти HTML-сущности (я не проверял) - ваши азиатские символы. Однако я не думал, что было бы правильно отправлять сущности HTML в вещах с x-www-form-urlencoded - что должен использоваться сам символ, поэтому я удивлен, что вы это видите. В быстром тесте, отправив вашу азиатскую строку в http://www.opinionatedgeek.com/dotnet/tools/base64decode/ (первая форма POST, которую я смог найти), я получаю пример, а не второй. Вы уверены, что второе - это то, что передается? (Я бы проверил с Wireshark) Какой браузер, как строится форма и т. Д .?

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