Преобразовать десятичный код 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();
}