Мультибитные символы повреждены ???? При чтении из базы данных и размещении на странице ASP с помощью httpurlconnection

StackOverflow https://stackoverflow.com/questions/5050894

Вопрос

В моем коде Java я получаю некоторые многобитные данные из базы данных и делаю некоторый XML DOM, с этими данными в качестве значения какого -либо узла, а затем преобразовывая DOM в строку и публикацию байта на страницу 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)... и здесь это не удается и начинает давать внутреннюю ошибку сервера ... пожалуйста, предложите, что не так со вторым подходом.

Это было полезно?

Решение

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

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

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

for (int i = 0; i < text.length(); i++)
{
    char c = text.charAt(i);
    log("Character " + c + " - " + (int) c);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top