, глядя на исходный код Request.java , он заметно заявляет:
/**
* Default encoding for POST or PUT parameters.
* See {@link #getParamsEncoding()}.
**/
private static final String DEFAULT_PARAMS_ENCODING = "UTF-8";
убедитесь, что файл с исходным кодом (как правило, имеет небольшой индикатор внизу прямо в Android Studio) и размещенный контент имеет кодировку UTF-8
(это довольно распространенная проблема в веб-разработке, которая может также применяться здесь). в случае, если контент не имеет кодировки UTF-8
, его необходимо преобразовать перед публикацией, чтобы не получить заменяющий символ �
. см. этот пример для преобразования String
.
также проверяют кодировку сценария, соединение с базой данных и базу данных на стороне сервера один раз; если какой-либо из них не поддерживает UTF-8
, он не будет работать. это не обязательно проблема на стороне клиента (которая должна поддерживать UTF-8
из коробки).
К сожалению, присвоение на innerHTML
причины разрушение всех дочерних элементов, даже при попытке добавить. Если Вы захотите сохранить дочерние узлы (и их обработчики событий), то необходимо будет использовать функции DOM :
function start() {
var myspan = document.getElementById("myspan");
myspan.onclick = function() { alert ("hi"); };
var mydiv = document.getElementById("mydiv");
mydiv.appendChild(document.createTextNode("bar"));
}
Редактирование: решение Bob's, из комментариев. Отправьте свой ответ, Bob! Получите кредит для него.:-)
function start() {
var myspan = document.getElementById("myspan");
myspan.onclick = function() { alert ("hi"); };
var mydiv = document.getElementById("mydiv");
var newcontent = document.createElement('div');
newcontent.innerHTML = "bar";
while (newcontent.firstChild) {
mydiv.appendChild(newcontent.firstChild);
}
}
Как небольшое (но связанный) в стороне, если Вы пользуетесь библиотекой JavaScript, такой как jQuery (v1.3), чтобы сделать Ваше dom управление, можно использовать прямые трансляции, посредством чего Вы настраиваете обработчик как:
$("#myspan").live("click", function(){
alert('hi');
});
и это будет применено к тому селектору в любом случае во время любого вида управления jQuery. Поскольку прямые трансляции видят: docs.jquery.com/events/live для управления jQuery видит: docs.jquery.com/manipulation
Потеря обработчиков событий, IMO, ошибка в способе, которым JavaScript обрабатывает DOM. Для предотвращения этого поведения можно добавить следующее:
function start () {
myspan = document.getElementById("myspan");
myspan.onclick = function() { alert ("hi"); };
mydiv = document.getElementById("mydiv");
clickHandler = mydiv.onclick; // add
mydiv.innerHTML += "bar";
mydiv.onclick = clickHandler; // add
}
Я ленивый программист. Я не использую DOM, потому что это кажется лишним набором текста. Для меня чем меньше кода, тем лучше. Вот как я бы добавил «bar», не заменяя «foo»:
function start(){
var innermyspan = document.getElementById("myspan").innerHTML;
document.getElementById("myspan").innerHTML=innermyspan+"bar";
}