我需要使用XMLHttpRequest(方法POST)將數據發送到服務器。XMLHttpRequest。不以UTF-8發送數據。任務是不可行的嗎?
條件和限制:
- 服務器總是假定,即字符編碼是唯一的窗口,1251。
- 我不能在服務器端改變任何東西。服務器不是我的。
- 我的代碼必須在FF,Chrome和IE8工作:-(我
sendAsBinary
但unsucessfully實驗。
正如我所看到的,XMLHttpRequest的發送前總是修改數據爲UTF-8,因此問題不能待解決。 權?
我需要使用XMLHttpRequest(方法POST)將數據發送到服務器。XMLHttpRequest。不以UTF-8發送數據。任務是不可行的嗎?
條件和限制:
sendAsBinary
但unsucessfully實驗。正如我所看到的,XMLHttpRequest的發送前總是修改數據爲UTF-8,因此問題不能待解決。 權?
你說「發送前的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應該是可讀的數據。
本頁沒有:https://developer.mozilla.org/en/XMLHttpRequest '注意:發送nsIDOMDocument時,版本3之前的Firefox始終使用UTF-8編碼發送請求; Firefox 3使用body.xmlEncoding指定的編碼正確發送文檔,如果未指定編碼,則使用UTF-8 –