Многобайтовые символы повреждены до???? при чтении из базы данных и публикации на странице 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);
}