Как конвертировать суррогатные пары в ответ сервлетов? Как я могу прочитать суррогатные пары? - PullRequest
1 голос
/ 16 марта 2020

У меня есть смайлики в качестве суррогатных пар, полученные в ответе.

Я хочу изменить эти суррогатные пары на 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! &#55357;&#56842;</***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();
    }
...