Если Вы хотите очистить отделение и удалить все дочерние узлы, Вы могли бы поместить:
var mydiv = document.getElementById('FirstDiv');
while(mydiv.firstChild) {
mydiv.removeChild(mydiv.firstChild);
}
Важной частью проблемы является то, как вы обрабатываете содержимое ответа HTTP. То есть как вы создаете объект json
? К тому времени, когда вы дойдете до кода в своем исходном сообщении, его содержимое уже будет повреждено.
Результатом запроса являются данные в кодировке UTF-8. Как вы разбираете его на объекты JSON? Правильная ли кодировка указана для декодера? Или используется кодировка символов вашей платформы по умолчанию?
Сначала попробуйте следующее:
str = j.getString("titleNoFormatting");
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("c:/test.txt"), "UTF-8"));
writer.write(str);
writer.close();
Затем откройте файл в блокноте. Если все выглядит нормально, значит проблема в вашем регистраторе или консоли, что он не настроен для использования UTF-8
. Иначе проблема, скорее всего, заключается в используемом вами JSON API, который не настроен на использование UTF-8
.
Изменить : если проблема на самом деле в используемом API JSON, и вы не используете Не знаю, что выбрать, то рекомендую использовать Gson . Это действительно упрощает преобразование строки Json в простой в использовании javabean. Вот простой пример:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.List;
import com.google.gson.Gson;
public class Test {
public static void main(String[] args) throws Exception {
URL url = new URL("http://ajax.googleapis.com/ajax/services/search/web"
+ "?start=0&rsz=large&v=1.0&q=rz+img+news+recordid+border");
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"));
GoogleResults results = new Gson().fromJson(reader, GoogleResults.class);
// Show all results.
System.out.println(results);
// Show title of 1st result (is arabic).
System.out.println(results.getResponseData().getResults().get(0).getTitle());
}
}
class GoogleResults {
ResponseData responseData;
public ResponseData getResponseData() { return responseData; }
public void setResponseData(ResponseData responseData) { this.responseData = responseData; }
public String toString() { return "ResponseData[" + responseData + "]"; }
static class ResponseData {
List<Result> results;
public List<Result> getResults() { return results; }
public void setResults(List<Result> results) { this.results = results; }
public String toString() { return "Results[" + results + "]"; }
}
static class Result {
private String url;
private String title;
public String getUrl() { return url; }
public String getTitle() { return title; }
public void setUrl(String url) { this.url = url; }
public void setTitle(String title) { this.title = title; }
public String toString() { return "Result[url:" + url +",title:" + title + "]"; }
}
}
Он хорошо выводит результаты. Надеюсь, это поможет.
API Google правильно отправляет UTF-8. Я думаю, проблема в том, что ваша кодировка по умолчанию не позволяет выводить арабский язык. Проверьте свойство file.encoding
или получите такую кодировку,
public static String getDefaultCharSet() throws IOException {
OutputStreamWriter writer = new OutputStreamWriter(new ByteArrayOutputStream());
return writer.getEncoding();
}
Если кодировка по умолчанию - ASCII или Latin-1, вы получите «?» S. Вам нужно изменить его на UTF-8.
Проблема, скорее всего, вызвана неправильной настройкой кодировки символов в том месте, которое вы читаете в HTTP-ответе от Google. Можете ли вы опубликовать код, который фактически получает URL-адрес и анализирует его в объекте JSON?
В качестве примера запустите следующее:
public class Test1 {
public static void main(String [] args) throws Exception {
// just testing that the console can output the correct chars
System.out.println("\"title\":\"مطبخ مطايب - كباب الدجاج والخضار بصلصة الروب");
URL url = new URL("http://ajax.googleapis.com/ajax/services/search/web?start=0&rsz=large&v=1.0&q=rz+img+news+recordid+border");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
InputStream is = connection.getInputStream();
// the important bit is here..........................\/\/\/
InputStreamReader reader = new InputStreamReader(is, "utf-8");
StringWriter sw = new StringWriter();
char [] buffer = new char[1024 * 8];
int count ;
while( (count = reader.read(buffer)) != -1){
sw.write(buffer, 0, count);
}
System.out.println(sw.toString());
}
}
Здесь используется довольно уродливый стандартный URL.openConnection ()
, который был с незапамятных времен. Если вы используете что-то вроде Apache httpclient , тогда вы можете сделать это очень легко.
Для небольшого ознакомления с информацией о кодировании и, возможно, объяснения того, почему new String (str.getBytes ( ), "UTF8");
никогда не будет работать прочтите статью Джоэла о юникоде
Я думаю, что пакет JSON.org Java JSON не может обрабатывать UTF8, независимо от того, передается он как символ UTF8 или фактически передается в коде \ uXXXX
. Я попробовал оба варианта следующим образом:
import org.json.
public class JsonTest extends TestCase {
public void testParseText() {
try {
JSONObject json1 = new JSONObject("{\"a\":\"\u05dd\"}"); // \u05dd is a Hebrew character
JSONObject json2 = new JSONObject("{\"a\":\"\\u05dd\"}"); // \u05dd is a Hebrew character
System.out.println(json1.toString());
System.out.println(json2.toString());
} catch (JSONException e) {
e.printStackTrace();
}
}
}
Получаю:
{"a":"?"}
{"a":"?"}
Есть идеи?