Athos
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>

Comments: Post a Comment

<< Home

Powered by Blogger