【问题标题】:XMLHttpRequest. Send data NOT in UTF-8. Is mission imposible?XMLHttpRequest。发送非 UTF-8 格式的数据。任务不可能吗?
【发布时间】:2011-10-14 10:23:14
【问题描述】:
我需要使用 XMLHttpRequest(方法 POST)向服务器发送数据。
条件和限制:
- 服务器始终假定字符编码仅为 windows-1251。
- 我无法更改服务器端的任何内容。服务器不是我的。
- 我的代码必须在 FF、Chrome 和 IE8 中运行 :-( 我尝试了
sendAsBinary 但没有成功。
如我所见,发送前的 XMLHttpRequest 总是将数据修改为 UTF-8,因此问题无法解决。
对吧?
【问题讨论】:
-
本页没有:developer.mozilla.org/en/XMLHttpRequestNote: When sending a nsIDOMDocument, versions of Firefox prior to version 3 always send the request using UTF-8 encoding; Firefox 3 properly sends the document using the encoding specified by body.xmlEncoding, or UTF-8 if no encoding is specified.
标签:
javascript
ajax
xmlhttprequest
【解决方案1】:
您说“发送前的 XMLHttpRequest 总是将数据修改为 UTF-8。”
这是错误的! XMLHttpRequest在发送前需要编码,编码由文档自己定义。
对于 html5,您可以使用<meta charset="YOUR-ENCODING-HERE">。
对于 html 或 xhtml,您必须使用
<meta http-equiv="Content-Type" content="text/html; charset=YOUR-ENCODING-HERE-WITHOUT-QUOTES">。
对于xml,你可以使用<?xml version="1.0" encoding="YOUR-ENCODING-HERE"?>。
那么,在 XMLHttpRequest.send() 之前,你必须XMLHttpRequest.setRequestHeader("Content-type","SOME-OTHER-DECLARATION; charset=YOUR-ENCODING-HERE-WITHOUT-QUOTES");。
鉴于以上所有情况,无论您的服务器默认采用何种编码,它都会使用请求建议的字符集(如果支持)来解码 URI。
还有另一种方法可以做到这一点。
我不知道您的服务器端使用什么编程语言。对于java,你可以使用,比如str是服务器得到的字符串,newStr = new String(str.getBytes("SERVER-ASSUMED-CHAR-ENCODING"), "YOUR-HTML-ENCODING");
在您的情况下,这将是 newStr = new String(str.getBytes("windows-1251"), "UTF-8");。
而 newStr 应该是可读的数据。