代码改变世界

htc文件GB2312编码格式导致包含中文的注释行混乱,不易发现(原创)

2006-06-12 14:47  BAsil  阅读(903)  评论(0编辑  收藏  举报

今天,在htc文件应用一段简单的dhtml时,竟然出现了错误,看一下

var _table = window.document.createElement("TABLE");
window.document.body.appendChild(_table);
_table.cellSpacing = 0;
_table.cellPadding = 0;
_table.className = "Main";
var _tr = _table.insertRow();
_tr.style.background='beige url(images/top_middle.gif) repeat-x';
var _td = _tr.insertCell();
_td.style.width = 8;
_td.style.height = 8;
_td.innerHTML = '<IMG SRC="images/top_left.gif" WIDTH="8" HEIGHT="8" BORDER=0>';
//_td = _tr.insertCell(); //第二列
_tr = _table.insertRow(); //第二行
_tr.vAlign = "top";
_td = _tr.insertCell();
_td.className = "MainTableLeft";
_td.colSpan = 2;
_td.appendChild(element);
alert(_table.rows.length);

可是_table.rows.length的结果总是1而不是期望的2,而这段代码在jscript中运行正常。经过反复的试验,最终发现问题出在htc的编码上。


Tips:在VS.net中更改htc编码

打开htc文件,选择另存为,在弹出的对话框中的保存按钮旁边有一个小的下拉箭头,选择utf-8保存。


当我更改了编码格式后,问题消失了。我的代码中只有两行有注释

//_td = _tr.insertCell(); //第二列
_tr = _table.insertRow(); //第二行


问题就出在这里,当编码格式为GB2312,由于解析器不能正确的解析中文字符,解析的结果类似:

//第二列_tr = _table.insertRow();
//第二行.....

因此第二个insertRow()并没有执行,问题解决。

总结:

1.htc文件一定注意其编码格式,有的问题可能是因为编码问题造成的。

P.S. 罗本就是牛X,偶已经把桌面换成他的了,我的技术一般,速度还可以,罗本就是我的偶像拉。