我试图解码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")获取值,我在这里得到عتباري但是我应该得到??????
我创建了一个将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.
编辑我用中文测试了上面的函数???,??????并且波斯语(??????和????? ??? ????)字符提供了正确的结果.
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)