Насколько я понимаю, Javascript использует UTF-8 для своих строк
Нет, нет.
Каждая страница имеет свою кодировку, определенную в метатеге, чуть ниже head element
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
или
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"/>
Кроме того, каждая страница должна редактироваться с целевой кодировкой кодировки . В противном случае он не будет работать должным образом.
И было бы неплохо определить целевую кодировку кодировки на стороне сервера.
Java
<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
PHP
header("Content-Type: text/html; charset=UTF-8");
C#
I do not know how to...
И было бы неплохо настроить каждый файл скрипта независимо от того, используются ли в нем чувствительные символы (á, é, í, ó, ú и т. Д.)
<script type="text/javascript" charset="UTF-8" src="/PATH/TO/FILE.js"></script>
...
Так что, по моей теории, если я перекодирую строку в ISO-8859-1 перед отправкой, это должно решить мою проблему
Нет, нет.
Целевой сервер может обрабатывать строки, отличные от ISO-8859-1 . Например, Tomcat обрабатывает ISO-8859-1 независимо от того, как вы настроили свою страницу. Поэтому на стороне сервера вам может потребоваться настроить запрос в соответствии с настройкой вашей страницы.
Java
request.setCharacterEncoding("UTF-8")
PHP
// I do not know how to...
Если вы действительно хотите перевести целевую кодировку кодировки, попробуйте выполнить следующее:
InternetExplorer
formElement.encoding = "application/x-www-form-urlencoded; charset=ISO-8859-1";
ELSE
formElement.enctype = "application/x-www-form-urlencoded; charset=ISO-8859-1";
Или Вы должны предоставить функцию, которая получает числовое представление в наборе символов Unicode, используемом каждым символом. Он будет работать независимо от целевой кодировки кодировки. Например, в качестве набора символов Unicode используется \ u00E1;
alert("á without its Unicode Character Set numerical representation");
function convertToUnicodeCharacterSet(value) {
if(value == "á")
return "\u00E1";
}
alert("á Numerical representation in Unicode Character Set is: " + convertToUnicodeCharacterSet("á"));
Здесь вы можете увидеть в действии:
Вы можете использовать эту ссылку в качестве руководства (см. Раздел JavaScript)
Добавлено в исходный ответ, как я реализую функциональность jQuery
var dataArray = $(formElement).serializeArray();
var queryString = "";
for(var i = 0; i < dataArray.length; i++) {
queryString += "&" + dataArray[i]["name"] + "+" + encodeURIComponent(dataArray[i]["value"]);
}
$.ajax({
url:"url.htm",
data:dataString,
contentType:"application/x-www-form-urlencoded; charset=UTF-8",
success:function(response) {
// proccess response
});
});
Работает без головной боли.
С уважением,