我不是用什么新鲜的技巧,也不用装什么插件,而是用最原始的方式——将程序源代码转换为对应的html。
blogger自带的日志编辑器功能比较弱。以前在blogger中贴程序源代码,都是在gmail里面用rich format编辑好,然后直接邮件发布。当我再用blogger的日志编辑器去修改这些日志时,日志中的程序源代码格式就会乱掉。最可能出现的情形就是代码的缩进丢失了。
大多数的带可视化模式和HTML模式的日志编辑器都存在一个问题:在可视化模式和HTML模式间切换的时候会将连续的空行(空格)合并为一个空行(空格)。这也就是导致我修改日志时把代码格式弄乱的原因。
除这一个问题之外,blogger日志编辑器还有另外几个问题,我以后会再写一篇日志详细说一说。这些问题加一起,让我感到很恶心,我不想再用可视化模式了,就干脆把blogger设置中Show Compose Mode for all your blogs?设置为"No",只用日志编辑器的HTML模式。写日志的时候稍微麻烦一点,但绝对可以保证日志格式正确。
那么,HTML模式下如何贴程序源代码呢?很简单,使用code标签。
<code>
...将程序源代码转换为Escaped Html后放在这里...
<code>
将程序源代码转换为escaped html是什么意思?就是将程序源代码中的一些特殊字符用转义字符来表示。比如,如果不将程序源代码中的联系的换行(空格)写成转义字符,那么HTML解析器会把连续的换行(空格)而当成一个换行(空格)。程序源代码的格式(尤其是缩进)就乱了。一般来说,程序源代码中下面这几个特殊字符需要使用转义字符来表示:
字符 | 转义字符 |
---|---|
" | " |
& | & |
< | < |
> | > |
不间断空格(non-breaking space) | |
换行符 | <br/> |
比如下面这两行代码:
if (str=="HELLO" && i<0)
return 1;
转换为Escaped Html就是:
if (str=="HELLO" && i<0)<br/> return 1;
然后将这段html代码放在<code></code>标签中,原来的程序源代码就可以被正确的显示出来了。
那么,怎样才能方便的将程序源代码转换为escaped html呢?作为一个程序员,我的答案是自己写一个转换程序:
public static String encode(String src){
String s = StringEscapeUtils.escapeHtml(src);
StringBuilder sb = new StringBuilder();
for(int i=0;i<s.length();i++){
char t = s.charAt(i);
switch(t){
case ' ':
sb.append(" ");
break;
case '\t':
sb.append(" ");
break;
case '\n':
sb.append("<br/>");
break;
case '\r':
break;
default:
sb.append(t);
}
}
return sb.toString();
}
注:我不确定是不是只有上面表中列出来的几个字符需要转义,所以在字符转义的部分我用了org.apache.commons.lang.StringEscapeUtils
Last modified on 2009-04-20