代码改变世界

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

  BAsil  阅读(906)  评论(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,偶已经把桌面换成他的了,我的技术一般,速度还可以,罗本就是我的偶像拉。


编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示