我试图将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")
来获取值,此处我得到عتباري
但我应该عتباري
答案 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();
}