Convert Decimal NCRs Code into UTF-8 in java (JSP)

2019-06-18 04:58发布

I was trying to decode string which in FARSI to UTF-8 but then i checked browser itself convert FARSI string into Decimal NCRs Code

How i can convert Decimal NCRs Code into UTF-8 ??

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

when i am trying convert using above code it is working fine but if i am using same string from an input box of JSP page its is giving me some output like this

عتباري

What modification do I need to do for converting into same.

EDIT

I entered عتباري in the jsp input box and in used request.getParameter("faMSg") to get the value and here i got عتباري but i should get عتباري

标签: java jsp utf-8
3条回答
Fickle 薄情
2楼-- · 2019-06-18 05:49

You should try setting content type to utf-8 in jsp page :

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

OR

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

UTF-8 is not default content type in jsp, and there are all sorts of interesting problems that arise from this.
Browsers will use the encoding of the page.So if you use UTF-8 in all your pages, then most browsers will send all data in UTF-8 encoding as well.

If your are reading textbox value in Servlet than You can tell your application server to treat any input as UTF-8, by calling,

request.setCharacterEncoding("UTF-8");    

before reading value on server side.

EDIT :

To apply this setting globally so that you don't need to edit every individual JSP, you can also add the following entry to your /WEB-INF/web.xml file:

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

查看更多
劳资没心,怎么记你
3楼-- · 2019-06-18 05:52

I created a custom function which converts DecimalNCR to 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();
}

This converts successfully your supplied String.

EDIT I tested the above function with Chinese 游鍚堃,你好你怎么样 and Farsi (عتباري , and مرحبا كيف حالك) character it provided correct results.

查看更多
老娘就宠你
4楼-- · 2019-06-18 06:00

This is work fine - white space is the problem that I solved

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();
}
查看更多
登录 后发表回答