Мультибитные символы повреждены ???? При чтении из базы данных и размещении на странице ASP с помощью httpurlconnection
-
15-11-2019 - |
Вопрос
В моем коде 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);
}