在 ISO-8859-1 编码的网页上显示汉字。一种解决办法就是我们不用 ISO-8859-1 或者 GB2312 编码,而统统都采用 UTF-8 编码。另一种就是把除了 ISO-8859-1 编码中前128个字符以外的所有其他的编码都用 NCR来表示。
NCR编码是由一个与号(&)跟着一个井号(#), 然后跟着这个字符的Unicode编码值, 最后跟着一个分号组成的。无视载体文件编码,无论你是gbk编码还是utf-8编码,展示的字符都不会出现乱码,这点就是它存在的原因。
/**
*
* Methods Descrip:汉字转换成NCR编码的字符
*
* @param str:以GBK编吗的汉字
* @return:NCR编码的字符串
*
*/
public String ChangeGB2NCR(String str) {
String res = "";
try {
String[] w = new String[str.length()];
for(int i =0;i<str.length();i++){
w[i]= str.substring(i,i+1);
byte[] utf_16E = w[i].getBytes("utf-16be");
String Str16k = byteTo16String(utf_16E);
int ncrNum = Integer.parseInt(Str16k, 16);
res = res + "&#" +ncrNum + ";";
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return res;
}
NCR编码是由一个与号(&)跟着一个井号(#), 然后跟着这个字符的Unicode编码值, 最后跟着一个分号组成的。无视载体文件编码,无论你是gbk编码还是utf-8编码,展示的字符都不会出现乱码,这点就是它存在的原因。
/**
*
* Methods Descrip:汉字转换成NCR编码的字符
*
* @param str:以GBK编吗的汉字
* @return:NCR编码的字符串
*
*/
public String ChangeGB2NCR(String str) {
String res = "";
try {
String[] w = new String[str.length()];
for(int i =0;i<str.length();i++){
w[i]= str.substring(i,i+1);
byte[] utf_16E = w[i].getBytes("utf-16be");
String Str16k = byteTo16String(utf_16E);
int ncrNum = Integer.parseInt(Str16k, 16);
res = res + "&#" +ncrNum + ";";
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return res;
}