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

时间:2013-12-27 11:01:34

标签: 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);

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

عتباري

我需要做哪些修改才能转换成相同的内容。

修改

  

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

3 个答案:

答案 0 :(得分: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();
}

这会成功转换您提供的String

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

答案 1 :(得分:1)

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

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

OR

<% @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>

答案 2 :(得分:0)

这很好用 - 白色空间是我解决的问题

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();
}