У меня есть смайлики в качестве суррогатных пар, полученные в ответе.
Я хочу изменить эти суррогатные пары на Unicode, чтобы WebSphere Portal 7 понимал Unicodes.
Добавлен фильтр для изменения ответа, для преобразования суррогатов в Unicode, но я не могу конвертировать в этой ситуации.
Фильтр:
public void doFilter(
ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException
{
CharResponseWrapper wrappedResponse = new CharResponseWrapper(
(HttpServletResponse)response);
chain.doFilter(request, wrappedResponse);
byte[] bytes = wrappedResponse.getByteArray();
String out = new String(bytes);
String inputXml = new String(out.getBytes("UTF-8"));
// Need to Convert the Surrogates to Unicode from the XML String here and write it back to Response
out = surrogatesToUnicode(inputXml);
response.getOutputStream().write(out.getBytes());
}
Ответ:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<xxxxx>
<xx>
<xx>
<xx></xx>
<xx>100420</xx>
<xx>xxx</xx>
<xx>4</xx>
<xx>false</xx>
<xx>false</xx>
<xx>false</xx>
<***QuestionHere***>Agent - Please run and advise with initial update when available; thank you for accepting! ��</***QuestionHere***>
Я хочу преобразовать данные �; �; в Юникод. И я использую эту функцию, но она не может распознать суррогатные пары в методе charCount и преобразовать из строки ответа.
public String surrogatesToUnicode(String str) {
StringBuilder sb = new StringBuilder();
for(int i = 0; i < str.length(); i ++) {
int cp = str.codePointAt(i);
if(Character.charCount(cp) == 2) {
sb.append("&#" + cp + ";");
i++;
}
else {
sb.append(Character.toChars(cp));
}
}
return sb.toString();
}