utf-8編碼轉(zhuǎn)換成gb2312
更新時間:2006年09月23日 00:00:00 作者:
[code]<script>
function chinesefromutf8url(strutf8)
{
var bstr = "";
var noffset = 0;
// processing point on strutf8
if( strutf8 == "" )
return "";
strutf8 = strutf8.tolowercase();
noffset = strutf8.indexof("%e");
if( noffset == -1 )
return strutf8;
while( noffset != -1 )
{
bstr += strutf8.substr(0, noffset);
strutf8 = strutf8.substr(noffset, strutf8.length - noffset);
if( strutf8 == "" ¦ ¦ strutf8.length < 9 ) // bad string
return bstr;
bstr += utf8codetochinesechar(strutf8.substr(0, 9));
strutf8 = strutf8.substr(9, strutf8.length - 9);
noffset = strutf8.indexof("%e");
}
return bstr + strutf8;
}
function unicodefromutf8(strutf8)
{
var bstr = "";
var ntotalchars = strutf8.length; // total chars to be processed.
var noffset = 0; // processing point on strutf8
var nremainingbytes = ntotalchars; // how many bytes left to be converted
var noutputposition = 0;
var icode, icode1, icode2; // the value of the unicode.
while (noffset < ntotalchars)
{
icode = strutf8.charcodeat(noffset);
if ((icode & 0x80) == 0) // 1 byte.
{
if ( nremainingbytes < 1 ) // not enough data
break;
bstr += string.fromcharcode(icode & 0x7f);
noffset ++;
nremainingbytes -= 1;
}
else if ((icode & 0xe0) == 0xc0) // 2 bytes
{
icode1 = strutf8.charcodeat(noffset + 1);
if ( nremainingbytes < 2 ¦ ¦ // not enough data
(icode1 & 0xc0) != 0x80 ) // invalid pattern
{
break;
}
bstr += string.fromcharcode(((icode & 0x3f) << 6) ¦ ( icode1 & 0x3f));
noffset += 2;
nremainingbytes -= 2;
}
else if ((icode & 0xf0) == 0xe0) // 3 bytes
{
icode1 = strutf8.charcodeat(noffset + 1);
icode2 = strutf8.charcodeat(noffset + 2);
if ( nremainingbytes < 3 ¦ ¦ // not enough data
(icode1 & 0xc0) != 0x80 ¦ ¦ // invalid pattern
(icode2 & 0xc0) != 0x80 )
{
break;
}
bstr += string.fromcharcode(((icode & 0x0f) << 12) ¦
((icode1 & 0x3f) << 6) ¦
(icode2 & 0x3f));
noffset += 3;
nremainingbytes -= 3;
}
else // 4 or more bytes -- unsupported
break;
}
if (nremainingbytes != 0)
{
// bad utf8 string.
return "";
}
return bstr;
}
function utf8codetochinesechar(strutf8)
{
var icode, icode1, icode2;
icode = parseint("0x" + strutf8.substr(1, 2));
icode1 = parseint("0x" + strutf8.substr(4, 2));
icode2 = parseint("0x" + strutf8.substr(7, 2));
return string.fromcharcode(((icode & 0x0f) << 12) ¦
((icode1 & 0x3f) << 6) ¦
(icode2 & 0x3f));
}
alert(chinesefromutf8url("%e6%b5%8b%e8%af%95"))
</script>[code]
function chinesefromutf8url(strutf8)
{
var bstr = "";
var noffset = 0;
// processing point on strutf8
if( strutf8 == "" )
return "";
strutf8 = strutf8.tolowercase();
noffset = strutf8.indexof("%e");
if( noffset == -1 )
return strutf8;
while( noffset != -1 )
{
bstr += strutf8.substr(0, noffset);
strutf8 = strutf8.substr(noffset, strutf8.length - noffset);
if( strutf8 == "" ¦ ¦ strutf8.length < 9 ) // bad string
return bstr;
bstr += utf8codetochinesechar(strutf8.substr(0, 9));
strutf8 = strutf8.substr(9, strutf8.length - 9);
noffset = strutf8.indexof("%e");
}
return bstr + strutf8;
}
function unicodefromutf8(strutf8)
{
var bstr = "";
var ntotalchars = strutf8.length; // total chars to be processed.
var noffset = 0; // processing point on strutf8
var nremainingbytes = ntotalchars; // how many bytes left to be converted
var noutputposition = 0;
var icode, icode1, icode2; // the value of the unicode.
while (noffset < ntotalchars)
{
icode = strutf8.charcodeat(noffset);
if ((icode & 0x80) == 0) // 1 byte.
{
if ( nremainingbytes < 1 ) // not enough data
break;
bstr += string.fromcharcode(icode & 0x7f);
noffset ++;
nremainingbytes -= 1;
}
else if ((icode & 0xe0) == 0xc0) // 2 bytes
{
icode1 = strutf8.charcodeat(noffset + 1);
if ( nremainingbytes < 2 ¦ ¦ // not enough data
(icode1 & 0xc0) != 0x80 ) // invalid pattern
{
break;
}
bstr += string.fromcharcode(((icode & 0x3f) << 6) ¦ ( icode1 & 0x3f));
noffset += 2;
nremainingbytes -= 2;
}
else if ((icode & 0xf0) == 0xe0) // 3 bytes
{
icode1 = strutf8.charcodeat(noffset + 1);
icode2 = strutf8.charcodeat(noffset + 2);
if ( nremainingbytes < 3 ¦ ¦ // not enough data
(icode1 & 0xc0) != 0x80 ¦ ¦ // invalid pattern
(icode2 & 0xc0) != 0x80 )
{
break;
}
bstr += string.fromcharcode(((icode & 0x0f) << 12) ¦
((icode1 & 0x3f) << 6) ¦
(icode2 & 0x3f));
noffset += 3;
nremainingbytes -= 3;
}
else // 4 or more bytes -- unsupported
break;
}
if (nremainingbytes != 0)
{
// bad utf8 string.
return "";
}
return bstr;
}
function utf8codetochinesechar(strutf8)
{
var icode, icode1, icode2;
icode = parseint("0x" + strutf8.substr(1, 2));
icode1 = parseint("0x" + strutf8.substr(4, 2));
icode2 = parseint("0x" + strutf8.substr(7, 2));
return string.fromcharcode(((icode & 0x0f) << 12) ¦
((icode1 & 0x3f) << 6) ¦
(icode2 & 0x3f));
}
alert(chinesefromutf8url("%e6%b5%8b%e8%af%95"))
</script>[code]
您可能感興趣的文章:
- 將字符串轉(zhuǎn)換成gb2312或者utf-8編碼的參數(shù)(js版)
- php實現(xiàn)utf-8和GB2312編碼相互轉(zhuǎn)換函數(shù)代碼
- UTF-8 GBK UTF8 GB2312 之間的區(qū)別和關(guān)系介紹
- PHP字符編碼問題之GB2312 VS UTF-8解決方法
- VBS實現(xiàn)GB2312,UTF-8,Unicode,BIG5編碼轉(zhuǎn)換工具
- PHP 解決utf-8和gb2312編碼轉(zhuǎn)換問題
- unicode utf-8 gb18030 gb2312 gbk各種編碼對比
- ASP中Utf-8與Gb2312編碼轉(zhuǎn)換亂碼問題的解決方法 頁面編碼聲明
- MSSQL轉(zhuǎn)MYSQL,gb2312轉(zhuǎn)utf-8無亂碼解決方法
- PHP iconv 解決utf-8和gb2312編碼轉(zhuǎn)換問題
- ASP UTF-8頁面亂碼+GB2312轉(zhuǎn)UTF-8 +生成UTF-8格式的文件(編碼)
- 用VBS實現(xiàn)的批量gb2312轉(zhuǎn)utf-8,支持拖動
- 用javascript實現(xiàn)gb2312轉(zhuǎn)utf-8的腳本
- [轉(zhuǎn)]ASP實現(xiàn)關(guān)鍵詞獲取(各搜索引擎,GB2312及UTF-8)
- UTF-8轉(zhuǎn)GB2312函數(shù)
- 將編碼從GB2312轉(zhuǎn)成UTF-8的方法匯總(從前臺、程序、數(shù)據(jù)庫)
相關(guān)文章
ReplaceTrim 函數(shù)之a(chǎn)sp實現(xiàn)過濾掉字符中所有的tab和回車和換行的代碼
ReplaceTrim 函數(shù)之a(chǎn)sp實現(xiàn)過濾掉字符中所有的tab和回車和換行的代碼...2007-09-09ASP 處理JSON數(shù)據(jù)的實現(xiàn)代碼
今天看網(wǎng)頁才發(fā)現(xiàn)了ASP也能處理JSON數(shù)據(jù)?呵呵,剛才論壇上看到一個兄弟寫的文章,沒有測試,不過理論上一定是可以的,之前腳本之家小編也發(fā)過類似的文章都可以看下2017-07-07ASP代碼實現(xiàn)自動清除替換ACCESS(MDB)數(shù)據(jù)庫的日文字符的
我們都知道ACCESS是ASP的親密伙伴。因為兩種最簡單的東西碰在一起總能迸發(fā)出火花。 然而,當(dāng)我們過濾不嚴(yán)格的時候經(jīng)常出現(xiàn)日文字符,這個時候搜索之后就會出現(xiàn)日文溢出。2008-06-06Dom遍歷XML的一個例子,結(jié)果為樹狀結(jié)構(gòu)
Dom遍歷XML的一個例子,結(jié)果為樹狀結(jié)構(gòu)...2007-01-01