Многобайтовые символы повреждены до ???? при чтении из базы данных и публикации на странице ASP с использованием HTTPURLConnection - PullRequest
0 голосов
/ 19 февраля 2011

В моем 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 Ответ

2 голосов
/ 19 февраля 2011

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

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

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

for (int i = 0; i < text.length(); i++)
{
    char c = text.charAt(i);
    log("Character " + c + " - " + (int) c);
}
...