Sunday, January 30, 2005
编码的痛苦
这个blog什么都好,就是html编辑器对中文支持有一点点让人烦恼的不够。
如果blog的设置中内码选gb2312,那么,一些繁体字,及符号“·”将不能辨认;而这个问题又不能简单的通过IE的代码转换来解决:如果先用IE打开一个gb2312编码的html文件,再“另存为”utf8或者western1252编码格式,则汉字的单、双引号将成为ASCII编码数值128以上的字符,从而不能被这里的html编辑器识别。 唉,于是,解决方法是,使用western1252编码,以避免繁体中文字及少数符号的显示问题,并自己写一个gb2312到western1252的编码转换器。
还有一个罗嗦的是不能显示代码,尤其是html的代码。这个功能也在转换器中实现了。
下面是转换器的代码(就是一个html文件)。
<HTML>
<HEAD>
<TITLE> gb2312 to western1252 </TITLE>
</HEAD>
<META http-equiv=Content-type content="text/html; charset=gb2312">
<BODY>
<br><TEXTAREA NAME="taG" id='taG' ROWS="5" COLS="40"></TEXTAREA>
<br><button onclick="fcnConvertEncode();" id="btn1">Convert: Gb2312 To Western1252</button>
<br><iframe NAME="If1" id="If1" height=70px ></iframe>
<br><TEXTAREA NAME="taW" id='taW' ROWS="5" COLS="40"></TEXTAREA>
<br><button onclick="fcnCodeDisplay();" id="btn2">Display Code</button>
<br><TEXTAREA NAME="taC" id='taC' ROWS="5" COLS="40"></TEXTAREA>
<SCRIPT LANGUAGE="JavaScript">
<!--
var arrKeyWord = new Array(
new Array( "%B7" , "·" )
);
function fcnGb2If()
{
window.frames["If1"].document.charset="gb2312";
document.all("If1").contentWindow.document.body.innerHTML = taG.value;
}
function fcnIf2Ww()
{
var sss = taW2.value;
for( var i = 0; i < arrKeyWordG2W2.length; ++i )
{
var re = new RegExp( arrKeyWordG2W2[i][0] , "ig" );
sss = sss.replace( re , arrKeyWordG2W2[i][1] );
}
taW.value = sss;
}
function fcnConvertEncode()
{
fcnGb2If();
taW.value = fcnGb2312ToWester1252(window.frames["If1"].document.body.innerHTML);
}
function fcnCodeDisplay()
{
taC.value = fcnTextToWester1252(taG.value);
}
//--------中文字符编码转换------------------------//
function fcnKeyWord(strEscapeWord)
{
for(var k=0;k<arrKeyWord.length;k++)
{
if(arrKeyWord[k][0] == strEscapeWord)
return true;
}
return false;
}
function fcnGb2312ToWester1252(s) //--------把中文字符转换成Western1252编码------------------------//
{
var retV = "";
for(var i=0;i<s.length;i++)
{
var si = s.substr(i,1);
var sie = escape(si);
var boolKey = fcnKeyWord(sie);
var u = sie.substring(1,2);
if (sie.length!=6 && boolKey==false)
retV += si;
else
{
var sih = "";
if(u != "u")
sih = sie.substring(1, sie.length);
else
sih = sie.substring(2, sie.length);
var siw = "&#" + eval("0x" + sih) + ";";
retV += siw;
}
}
return retV;
}
function fcnTextToWester1252(s) //--------把代码转换成Western1252编码的html文件以显示------------------------//
{
var retV = "";
var i;
var si = "";
var sie = "";
var u = "";
var sih = "";
var siw = "";
var sihPrev = "";
for(i=0;i<s.length;i++)
{
si = s.substr(i,1);
sie = escape(si);
u = sie.substring(1,2);
if(sie.length==1)
{
retV += sie;
sihPrev = sie;
}
else
{
if(u != "u")
{
sih = sie.substring(1, sie.length);
siw = "&#" + eval("0x" + sih) + ";";
retV += siw;
if(sihPrev == "0D" & sih == "0A")
retV += "<BR>";
sihPrev = sih;
}
else
{
sih = sie.substring(2, sie.length);
siw = "&#" + eval("0x" + sih) + ";";
retV += siw;
sihPrev = sih;
}
}
}
return retV;
}
//-->
</SCRIPT>
</BODY>
</HTML>

