在Java(JSP)中将十进制NCR代码转换为UTF-8

Dha*_*mar 6 java jsp utf-8

我试图解码FARSI中的字符串到UTF-8然后我检查浏览器本身将FARSI字符串转换为十进制NCR代码

如何将十进制NCR代码转换为UTF-8?

String farMsg = "??????";
String finalMsg = new String(farMsg.getBytes(),"UTF-8");
System.out.println("\n Farsi Message \n" + finalMsg);
Run Code Online (Sandbox Code Playgroud)

当我尝试使用上面的代码转换它工作正常,但如果我从JSP页面的输入框使用相同的字符串,它给我一些像这样的输出

عتباري
Run Code Online (Sandbox Code Playgroud)

转换成相同内容需要做哪些修改.

编辑

我进入??????了jsp输入框并用于request.getParameter("faMSg")获取值,我在这里得到عتباري但是我应该得到??????

dbw*_*dbw 8

我创建了一个将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();
}
Run Code Online (Sandbox Code Playgroud)

这会成功转换您提供的String.

编辑我用中文测试了上面的函数???,??????并且波斯语(??????????? ??? ????)字符提供了正确的结果.


Yag*_*ola 1

utf-8您应该尝试在 jsp 页面中将 内容类型设置为:

<%@page contentType="text/html;charset=UTF-8"%>   
Run Code Online (Sandbox Code Playgroud)

或者

<% @page pageEncoding="UTF-8" %>     
Run Code Online (Sandbox Code Playgroud)

UTF-8 不是 jsp 中的默认内容类型,因此会出现各种有趣的问题。
浏览器将使用页面的编码。因此,如果您UTF-8在所有页面中使用,那么大多数浏览器也会以UTF-8编码发送所有数据。

如果您正在 Servlet 中读取文本框值,您可以通过调用以下命令告诉应用程序服务器将任何输入视为 UTF-8:

request.setCharacterEncoding("UTF-8");    
Run Code Online (Sandbox Code Playgroud)

在服务器端读取值之前。

编辑 :

要全局应用此设置,以便不需要编辑每个单独的 JSP,您还可以将以下条目添加到 /WEB-INF/web.xml 文件中:

<jsp-config>
<jsp-property-group>
    <url-pattern>*.jsp</url-pattern>
    <page-encoding>UTF-8</page-encoding>
</jsp-property-group>
Run Code Online (Sandbox Code Playgroud)