JQuery发布UTF8字符无法正常工作的内容

时间:2010-12-22 03:11:33

标签: jquery utf-8

我有一个JQuery脚本将表单字段的内容发布到一个简单的servlet。当我在表单字段中放入中文字符(在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表单更改为post而不使用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 :(得分:0)

第一个:

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 

...是UTF-8字符串的URL转义表单:

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

我认为(我没有检查过)那些HTML实体是你的亚洲字符。但是,我不认为在x-www-form-urlencoded事物中发送HTML实体是有效的 - 应该使用角色本身,所以我很惊讶你看到了。在快速测试中,将您的亚洲字符串提交到http://www.opinionatedgeek.com/dotnet/tools/base64decode/(我能找到的第一个POST表单),我得到的例子,而不是第二个。你确定第二个是传输的吗? (我查看Wireshark)什么浏览器,表单是如何构建的?等等。

相关问题