您的位置:首页 > Web前端 > HTML

将HTML中的特殊字符转化为可显示的字符

2013-03-06 15:33 288 查看
很多时候丛网页中抽取的内容中都含有很多特殊的转义字符,网页中显示的要么是实体名称,要么是实体编码,如

显示说明实体名称实体编号
半方大的空白
全方大的空白
不断行的空白格  
<小于<<
>大于>>
&&符号&&
"双引号""
©版权©©
®已注册商标®®
商标(美国)
×乘号××
÷除号÷÷
这里有前人写好的,将实体编码转化为可显示字符的代码:Java的HTML的URL字符编码转换为Java字符串的函数 | 中文Flex例子。原理是根据实体编码中的数字,得到对应的字符。但上述方法不支持将实体名称转化为可显示字符,如能将"""转化为双引号,却不能识别"""。这次没有固定的规律,只能自己作映射了。比较折中的做法是转化如下几个常见的:

>>
""
 
'
修改后的代码如下:

/**
* Convert HTML character enitities(Unicode) to part of a Java String
*/
import java.util.regex.*;

public class UnicodeCeToJavaString {
static final String mbs = "&#(\\d+);"; // like "ロ"

public static String EncodeCesToChars(String paramStr) {
paramStr = paramStr.replace("&","&")
.replace("<","<")
.replace(">",">")
.replace(""","\"")
.replace(" "," ")
.replace("'","'");

String mbChar;
StringBuffer sb = new StringBuffer();
Pattern pat = Pattern.compile(mbs);
Matcher mat = pat.matcher(paramStr);
while (mat.find()) {
mbChar = getMbCharStr(mat.group(1)); // pass the digit part
mat.appendReplacement(sb, mbChar);
}
mat.appendTail(sb);
return new String(sb);
}

/* worker method */
static String getMbCharStr(String digits) { // handle "12525" part which is
// a
char[] cha = new char[1]; // Unicode value stringnized
try {
int val = Integer.parseInt(digits);
char ch = (char) val;
cha[0] = ch;
} catch (Exception e) {
System.err.println("Error from getMbCharStr:");
e.printStackTrace(System.err);
}
return new String(cha); // easy!, because Java uses Unicode
}

public static void main(String[] args) {
System.out.println(UnicodeCeToJavaString.EncodeCesToChars("George's War in North America"));
}
}


比较全的编码表参见:常用HTML转义字符,html转义符,JavaScript转义符,html转义字符表,HTML语言特殊字符对照表(ISO Latin-1字符集)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: