Многобайтовые символы повреждены до???? при чтении из базы данных и публикации на странице ASP с использованием HTTPURLConnection

В моем Java-коде я извлекаю некоторые многобайтовые данные из базы данных и создаю некоторый XML-DOM, используя эти данные в качестве значения некоторого узла, затем преобразовываю DOM в String и отправляю байты на ASP-страницу через HTTPURLConnection, но каким-то образом на стороне получателя данные появляется как???? вместо некоторых многобайтовых значений. Пожалуйста, предложите, что делать.

Вещи, которые я уже делаю..

1) я поставил -Dfile.encoding =UTF8 как системное свойство 2) при использовании TransformerFactory для преобразования моего XML DOM в строку, я установил

 transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8")

чтобы убедиться в правильности кодировки. Пожалуйста, предложите, где я ошибаюсь.

@Jon Skeet Еще несколько вещей, которые можно добавить сюда... 1) Я правильно получаю данные из базы данных. 2) Преобразованный XML также представляется правильным, поскольку я проверил его, сохранив в локальной файловой системе.
Для публикации ранее я использовал что-то вроде

'dout = new DataOutputStream(urlconn.getOutputStream());'  
 'dout.write(strXML.getBytes());' 
 'dout.write(strXML);' 

и полученные данные на стороне получателя конвертировались в????? но потом я переключился на
'

dout=new OutputStreamWriter(urlconn.getOutputStream(),"UTF8");' 
'dout.write(strXML);' 

тогда данные на стороне получателя кажутся правильными... но проблема возникает с тем, как они обрабатываются на стороне получателя в этом случае. в моем приемнике ASP-код я использую objStream.WriteLine (oXMLDom.xml)... и здесь это терпит неудачу и начинает давать внутреннюю ошибку сервера... пожалуйста предложите, что случилось со вторым подходом.

1 ответ

Решение

Там происходит много потенциальных конверсий. Вы должны проверять данные на каждом этапе:

  • Убедитесь, что вы получаете его из базы данных правильно
  • Посмотрите, как выглядит преобразованный XML
  • Смотрите, что идет по сети (включая заголовки HTTP)
  • Проверьте, что именно вы получаете в ASP

Не просто распечатывайте строки как строки - запишите значение Unicode для каждого символа, приведя его к int:

for (int i = 0; i < text.length(); i++)
{
    char c = text.charAt(i);
    log("Character " + c + " - " + (int) c);
}
Другие вопросы по тегам