前几天在解决Java自动生成word的时候(模板方式),出现了office打开汉字乱码,wps打开正常。这怎么能行,虽然客户要求用wps,但本着做项目要严谨的态度应该把这个问题解决掉。
刚开始分析是汉字编码的问题,但经过多次的编码与解码没有效果,说明问题不是出现在这里。抱着实试试看的态度,将生成的word用ue打开了,发现整个文件仅有少量的汉字(这也证明了不是汉字编码的问题)(在生成的word里找到这几个汉字也是有方法的,在要生成的汉字后面添如多个“1”,这样在ue里就可以搜索多个“1”而找到汉字)。此时就奇怪了,整个文档里有很多汉字的为什么只有生成的汉字显示出来了呢,其他汉字都哪里去了?仔细一看,找到了,每个汉字都变成了“&#”加5个数字的形式。
看到这问题就比较明了了,“&#”加5个数字的就是汉字,这种汉字在word中就能后显示,而直接的汉字不能显示,这我们也不能怪word的“笨”,从这也可以看出还是我们中国的wps比较体贴中国人。那原因找到了就要解决,其实问题很明了,就是把每个汉字变成“&#”加5个数字,关键是怎么转,这又是什么码?到网上搜了下原来这叫HTML标示符;又搜了下,还真有Java将汉字转为HTML标示符的方法,下面是将字符串转HTML标示符的方法
// 将汉字字符串转为html标示符
private String changeToHTMLCode(String src) {
String htmlStr = "";
for (int i = 0; i != src.length(); i++) {
int str = src.codePointAt(i);
htmlStr = htmlStr + "&#" + str + ";";
}
return htmlStr;
}