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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Java(JSP)中将十进制NCR代码转换为UTF-8相关的知识,希望对你有一定的参考价值。

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

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

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

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

عتباري

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

编辑

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

答案

我创建了一个自定义函数,将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

编辑我测试了上述函数与中国游鍚堃你好你怎么样和波斯语(عتباري,和مرحبا كيف حالك)字符,它提供了正确的结果。

另一答案

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

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

要么

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

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

如果您正在读取Servlet中的文本框值,那么您可以通过调用告诉应用程序服务器将任何输入视为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();
}

以上是关于在Java(JSP)中将十进制NCR代码转换为UTF-8的主要内容,如果未能解决你的问题,请参考以下文章

无法在springboot中将'java.lang.string'的值从jsp转换为'java.localtime'

在 Java 中将字符串转换为十六进制

在java中将字符串转换为压缩十进制

如何在Java中将字符从字母字符转换为十六进制数字?

在 Groovy 中将整数转换为十六进制字符串

严格使用乘法和除法在Java中将二进制数转换为十进制数