Преобразовать десятичный код NCRs в UTF-8 в Java (JSP)

Я пытался декодировать строку, которая в FARSI в UTF-8, но затем я проверил сам браузер конвертировать строку FARSI в десятичный код NCRs

Как я могу преобразовать десятичный код NCRs в UTF-8??

String farMsg = "عتباري";
String finalMsg = new String(farMsg.getBytes(),"UTF-8");
System.out.println("\n Farsi Message \n" + finalMsg);

когда я пытаюсь конвертировать с использованием приведенного выше кода, он работает нормально, но если я использую ту же строку из поля ввода JSP страница его дает мне какой-то вывод, как это

عتباري

Какую модификацию мне нужно сделать, чтобы конвертировать в такую ​​же.

РЕДАКТИРОВАТЬ

Я вошел عتباري в поле ввода JSP и используется request.getParameter("faMSg") чтобы получить значение, и вот я получил عتباري но я должен получить عتباري

3 ответа

Я создал пользовательскую функцию, которая преобразует DecimalNCR в String,

public static String ConvertDecimalNCRToString(String hex)
{
    String myString = hex.replace("&#", "");
    String[] split = myString.split(";");
    StringBuilder sb = new StringBuilder();

    for (int i = 0; i < split.length; i++) 
    {
        sb.append((char)Integer.parseInt(split[i]));
    }
    return sb.toString();
}

Это успешно преобразует ваши поставленные String,

РЕДАКТИРОВАТЬ Я проверил вышеупомянутую функцию с китайским 游鍚堃,你好你怎么样 и фарси (عتباري, а также مرحبا كيف حالك) характер это дало правильные результаты.

Вы должны попробовать установить тип контента в utf-8 на странице JSP:

<%@page contentType="text/html;charset=UTF-8"%>   

ИЛИ ЖЕ

<% @page pageEncoding="UTF-8" %>     

UTF-8 не является типом контента по умолчанию в jsp, и из этого возникают всевозможные интересные проблемы.
Браузеры будут использовать кодировку страницы. Так что если вы используете UTF-8 на всех ваших страницах большинство браузеров будут отправлять все данные в UTF-8 а также кодирование.

Если вы читаете значение текстового поля в сервлете, вы можете указать серверу приложений, чтобы он обрабатывал любой ввод как UTF-8, вызывая

request.setCharacterEncoding("UTF-8");    

перед чтением значения на стороне сервера.

РЕДАКТИРОВАТЬ:

Чтобы применить этот параметр глобально, чтобы вам не нужно было редактировать каждый отдельный JSP, вы также можете добавить следующую запись в ваш файл /WEB-INF/web.xml:

<jsp-config>
<jsp-property-group>
    <url-pattern>*.jsp</url-pattern>
    <page-encoding>UTF-8</page-encoding>
</jsp-property-group>

Это нормально работает - пробел это проблема, которую я решил

Public static String ConvertDecimalNCRToString(String hex)    
  {
        String myString = hex.replace("&#", "");
        String[] split = myString.split(";");
        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < split.length; i++)
        {
            char first = split[i].charAt(0);

            if (first==' ')

            {
                sb.append(" ");
                split[i]=split[i].substring(1);
            }
            if (split[i].isEmpty())
            {

            }else
            {
                sb.append((char)Integer.parseInt(split[i]));
            }
        }
        return sb.toString();
}
Другие вопросы по тегам