激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - ASP教程 - ASP UTF-8頁面亂碼+GB2312轉(zhuǎn)UTF-8 +生成UTF-8格式的文件(編碼)

ASP UTF-8頁面亂碼+GB2312轉(zhuǎn)UTF-8 +生成UTF-8格式的文件(編碼)

2019-09-19 11:54asp教程網(wǎng) ASP教程

ASP動態(tài)網(wǎng)頁下UTF-8頁面亂碼+GB2312轉(zhuǎn)UTF-8 +生成UTF-8格式的文件(編碼)

最好的方法: 
先說一下基本的東西: 
<%@ codepage=65001%>UTF-8 
<%@ codepage=936%>簡體中文 
<%@ codepage=950%>繁體中文 
<%@ codepage=437 %>美國/加拿大英語 
<%@ codepage=932 %>日文 
<%@ codepage=949 %>韓文 
<%@ codepage=866 %>俄文 

codepage指定了IIS按什么編碼讀取傳遞過來的串串(表單提交,地址欄傳遞等)。 

出亂碼的原因也就是網(wǎng)站要整合的時(shí)候模塊編碼不相同引起的。 
就像我的博客相同,整合的時(shí)候都會出這個(gè)問題,因?yàn)锽LOG是Utf-8的, 
近來很多網(wǎng)友都在為這個(gè)問題咨詢,我嘗試了很多種方法。 
最方便的方法如下: 
不要轉(zhuǎn)換任何模塊網(wǎng)頁的編碼該utf-8的還是utf-8,該Gb22312的還是Gb2312 
在Utf-8模塊的包文檔(如conn.asp,但是要注意conn.asp必須是在第一行調(diào)用)最前面加上 
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> 
<%Session.CodePage=65001%> 
在GB2312模塊的包文檔最前面加上 
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> 
<%Session.CodePage=936%> 
其他編碼的類推。 
ASP中漢字與UTF-8的互相轉(zhuǎn)換 
'=============漢字轉(zhuǎn)換為UTF-8================== 

function chinese2unicode(Str) 
for i=1 to len(Str) 
Str_one=Mid(Str,i,1) 
Str_unicode=Str_unicode&chr(38) 
Str_unicode=Str_unicode&chr(35) 
Str_unicode=Str_unicode&chr(120) 
Str_unicode=Str_unicode& Hex(ascw(Str_one)) 
Str_unicode=Str_unicode&chr(59) 
next 
chinese2unicode = Str_unicode 
end function 



'=============UTF-8轉(zhuǎn)換為漢字================== 

function UTF2GB(UTFStr) 
for Dig=1 to len(UTFStr) 
if mid(UTFStr,Dig,1)="%" then 
if len(UTFStr) >= Dig+8 then 
GBStr=GBStr & ConvChinese(mid(UTFStr,Dig,9)) 
Dig=Dig+8 
else 
GBStr=GBStr & mid(UTFStr,Dig,1) 
end if 
else 
GBStr=GBStr & mid(UTFStr,Dig,1) 
end if 
next 
UTF2GB=GBStr 
end function 


function ConvChinese(x) 
A=split(mid(x,2),"%") 
i=0 
j=0 

for i=0 to ubound(A) 
A(i)=c16to2(A(i)) 
next 

for i=0 to ubound(A)-1 
DigS=instr(A(i),"0") 
Unicode="" 
for j=1 to DigS-1 
if j=1 then 
A(i)=right(A(i),len(A(i))-DigS) 
Unicode=Unicode & A(i) 
else 
i=i+1 
A(i)=right(A(i),len(A(i))-2) 
Unicode=Unicode & A(i) 
end if 
next 

if len(c2to16(Unicode))=4 then 
ConvChinese=ConvChinese & chrw(int("&H" & c2to16(Unicode))) 
else 
ConvChinese=ConvChinese & chr(int("&H" & c2to16(Unicode))) 
end if 
next 
end function 

function c2to16(x) 
i=1 
for i=1 to len(x) step 4 
c2to16=c2to16 & hex(c2to10(mid(x,i,4))) 
next 
end function 

function c2to10(x) 
c2to10=0 
if x="0" then exit function 
i=0 
for i= 0 to len(x) -1 
if mid(x,len(x)-i,1)="1" then c2to10=c2to10+2^(i) 
next 
end function 

function c16to2(x) 
i=0 
for i=1 to len(trim(x)) 
tempstr= c10to2(cint(int("&h" & mid(x,i,1)))) 
do while len(tempstr)<4 
tempstr="0" & tempstr 
loop 
c16to2=c16to2 & tempstr 
next 
end function 

function c10to2(x) 
mysign=sgn(x) 
x=abs(x) 
DigS=1 
do 
if x<2^DigS then 
exit do 
else 
DigS=DigS+1 
end if 
loop 
tempnum=x 

i=0 
for i=DigS to 1 step-1 
if tempnum>=2^(i-1) then 
tempnum=tempnum-2^(i-1) 
c10to2=c10to2 & "1" 
else 
c10to2=c10to2 & "0" 
end if 
next 
if mysign=-1 then c10to2="-" & c10to2 
end function 

GB2312轉(zhuǎn)UTF-8 

'個(gè)人代碼風(fēng)格注釋(變量名中第一個(gè)小寫字母表表示變量類型) 
'i:為Integer型; 
's:為String; 
Function U2UTF8(Byval a_iNum) 
Dim sResult,sUTF8 
Dim iTemp,iHexNum,i 

iHexNum = Trim(a_iNum) 

If iHexNum = "" Then 
Exit Function 
End If 

sResult = "" 

If (iHexNum < 128) Then 
sResult = sResult & iHexNum 
ElseIf (iHexNum < 2048) Then 
sResult = ChrB(&H80 + (iHexNum And &H3F)) 
iHexNum = iHexNum \ &H40 
sResult = ChrB(&HC0 + (iHexNum And &H1F)) & sResult 
ElseIf (iHexNum < 65536) Then 
sResult = ChrB(&H80 + (iHexNum And &H3F)) 
iHexNum = iHexNum \ &H40 
sResult = ChrB(&H80 + (iHexNum And &H3F)) & sResult 
iHexNum = iHexNum \ &H40 
sResult = ChrB(&HE0 + (iHexNum And &HF)) & sResult 
End If 

U2UTF8 = sResult 
End Function 

Function GB2UTF(Byval a_sStr) 
Dim sGB,sResult,sTemp 
Dim iLen,iUnicode,iTemp,i 

sGB = Trim(a_sStr) 
iLen = Len(sGB) 
For i = 1 To iLen 
sTemp = Mid(sGB,i,1) 
iTemp = Asc(sTemp) 

If (iTemp>127 OR iTemp<0) Then 
iUnicode = AscW(sTemp) 
If iUnicode<0 Then 
iUnicode = iUnicode + 65536 
End If 
Else 
iUnicode = iTemp 
End If 

sResult = sResult & U2UTF8(iUnicode) 
Next 

GB2UTF = sResult 
End Function 

'調(diào)用方法 
Response.BinaryWrite(GB2UTF("中國人")) 



asp UTF-8 亂碼問題的解決方法小結(jié) 
這里整理下asp頁面下出現(xiàn)亂碼的問題,好多ajax讀取的數(shù)據(jù)出現(xiàn)亂碼的解決方法,asp.net,php等語言的亂碼,解決原理都是一樣的。 
這個(gè)是網(wǎng)頁編碼的問題。中文一般采用的是gb2312這樣的話顯示中文基本上不會出現(xiàn)亂碼。但是有時(shí)候我們用的是一種國際上通用的utf-8格式。如果utf-8格式人不是很了解的話是容易出現(xiàn)亂碼的。 
有許多朋友問過我,為什么在ASP里指定了codepage為65001還經(jīng)常顯示亂碼.才子在這里將這個(gè)問題詳細(xì)解釋一下,以免很多朋友再走彎路,甚至排斥UTF-8. 
asp網(wǎng)頁utf8亂碼如果你還不知道UTF-8是什么東東,那才子建議你先去搜索一下UTF-8的相關(guān)資料吧. 
UTF-8編碼之所以被越來越多的人接受甚至喜歡,肯定是有道理的,在WEB2.0盛行的今天,在大談多瀏覽器兼容的同時(shí),不得不想到字符編碼不同所造成的亂碼現(xiàn)象同樣需要得到很好的處理..... 
在N年以前,IE6以下的所有版本,只要沒有安裝相應(yīng)的字庫,訪問相關(guān)的頁面都是會亂碼的,例如,我是IE5 (Windows2000默認(rèn)) 的版本,在沒有安裝IE繁體字庫的情況下,訪問任何繁體頁面的網(wǎng)站都是會亂碼的,當(dāng)然前提是該頁面采用了BIG5的Charset,而UTF-8作為一種 國際編碼就能很好的處理該問題,只要將頁面存為UTF-8編碼格式,再在頁面上將codepage及charset全部定義為utf-8就可以在任何客戶 端瀏覽器中顯示出完全正確的內(nèi)容,完全不會亂碼...... 
好了,才子這里以ASP頁面為例,以一個(gè)實(shí)例來看具體操作吧: 
在這才子推薦用Editplus來寫代碼,才子也專門寫過一篇Editplus的使用教程,有興趣的朋友可以點(diǎn)擊這里 去看看. 
打開新建一個(gè)ASP頁面,相信玩ASP的朋友都會留意到,許多下載的源碼里,頁面最上方一般都有一句: 
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> 
前面的language應(yīng)該不用多說了,vbscript就是ASP默認(rèn)的腳本語言,其實(shí)完全可以不用寫,寫了好像還會影響頁面執(zhí)行效率,在這里我們先不 討論這個(gè)問題. 后面的codepage就是關(guān)鍵了,目的就是告訴瀏覽器,此頁面是何種編碼,936代表是簡體中文,而950代表繁體中文,65001就是我們今天說的 UTF-8編碼了.我們將936改成65001,整句如下: 
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> 
再加上輸出幾個(gè)中文字看看能不能正確顯示吧. 
<% 
Response.Write "第一次測試UTF-8頁面" 
%> 
OK,直接點(diǎn)擊"保存",執(zhí)行這個(gè)頁面看看,如果不出意外,大家可能看到顯示出的是 "一尾UTF-8頁" 這幾個(gè)字,中文有亂碼的現(xiàn)象,什么原因呢? 
OK,請大家再點(diǎn)擊最上面的 "文件" 菜單,選擇"另存為",最下面一行有個(gè)編碼,默認(rèn)應(yīng)該是ANSI的,請大家點(diǎn)下拉框,選擇UTF-8,再點(diǎn)保存,再執(zhí)行試試看,如果不出意外,亂得更厲害 了,呵呵,暈了吧.別急,想想原因,因?yàn)槲覀冏龅捻撁媸荋TML返回的,以前我們寫HTML時(shí),看到body前面,也就是head里都有一句meta,應(yīng) 該是這樣的: 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 
也就是指定頁面以gb2312編碼返回結(jié)果,一定要寫在有返回結(jié)果輸出的前面.大家都知道gb2312是簡體中文吧,我們今天說的是UTF-8編碼,我們就將gb2312改成UTF-8吧,全部代碼如下: 
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
<% 
Response.Write "第一次測試UTF-8頁面" 
%> 
再執(zhí)行看看,嗯,這次正常顯示了吧....... 
asp網(wǎng)頁utf8亂碼結(jié)論:采用UTF-8編碼,除了要將文件另存為UTF-8格式之外,還需要同時(shí)指定codepage及charset. 
保證asp葉面一定不會出現(xiàn)亂碼的代碼應(yīng)該是這樣的: 
(假定是UTF-8的葉子) 
<%@ CODEPAGE=65001 %> 
<% Response.CodePage=65001%> 
<% Response.Charset="UTF-8" %> 
可以建立公共文件code.asp,所有頁面都包含這個(gè)編碼指定. 
Asp生成UTF-8格式的文件(編碼) 
ASP中操作UTF-8格式的文件 
注意:這里說的ASP可不是ASP.net。 
ASP由于是一種古老的語言,它的一些功能對UTF-8支持非常差。 
比如,你想生成一個(gè)UTF-8格式的文件,使用常用的 Scripting.FileSystemObject 對象就不行。 

Scripting.FileSystemObject 對象創(chuàng)建文件的函數(shù),是下面方式: 
FileSystemObject.CreateTextFile(filename[,overwrite[,unicode]]) 

其中的 unicode 屬性是這樣描述的: 

可選項(xiàng)。Boolean 值指明是否以 Unicode 或 ASCII 文件格式創(chuàng)建文件。如果以 Unicode 文件格式創(chuàng)建文件,則該值為 True;如果以 ASCII 文件格式創(chuàng)建文件,則該值為 False。如果省略此部分,則假定創(chuàng)建 ASCII 文件。 

我們是無法用這個(gè)函數(shù)來創(chuàng)建UTF-8格式文件的。 
這時(shí)候,我們可以使用 ADODB.Stream 對象,使用方法見下面: 

以下是引用片段: 
Set objStream = Server.CreateObject("ADODB.Stream") 
With objStream 
.Open 
.Charset = "utf-8" 
.Position = objStream.Size 
.WriteText=str 
.SaveToFile server.mappath("/sitemap.xml"),2 
.Close 
End With 
Set objStream = Nothing 

附: 
ASCII 、Unicode 、 UTF-8 介紹: 
ASCII 是一種字符集,包括大小寫的英文字母、數(shù)字、控制字符等,它用一個(gè)字節(jié)表示,范圍是 0-127。 

由于 ASCII 表示的字符非常有限,各個(gè)國家或者地區(qū)在此基礎(chǔ)上提出了自己的字符集,比如在中國應(yīng)用非常廣泛的 GB2312,它為漢字提供了編碼,用兩個(gè)字節(jié)表示。 

這些字符集之間互不兼容,相同的數(shù)字可能表示不同的字符,為信息交流帶來了麻煩。 
Unicode 是一種字符集,它將世界上的所有字符映射成一個(gè)唯一的數(shù)字(code point),比如字母 a 對應(yīng)的數(shù)字 0x0041。目前 Unicode 還處于發(fā)展中,它所包容的字符越來越多。 

在將 Unicode 表示的字符進(jìn)行存儲時(shí),還需要一定的編碼方式,比如 UCS-2,它用兩個(gè)字節(jié)來表示 Unicode 編碼的字符。而 UTF-8 是 Unicode 字符集的另外一種編碼方式,它是變長度的,最多 6 個(gè)字節(jié),小于 127 的字符用一個(gè)字節(jié)表示,與 ASCII 字符集的結(jié)果一樣,因而具有非常好的兼容性,ASCII 編碼下的英語文本不需要修改就可以當(dāng)作 UTF-8 編碼進(jìn)行處理,應(yīng)用非常廣泛。 

完整示例: 

'================================================ 
'函數(shù)名:CreatedTextFiles 
'作 用:創(chuàng)建文本文件 
'參 數(shù):filename ----文件名 
' body ----主要內(nèi)容 
'================================================ 
Public Function CreatedTextFiles(ByVal FileName, ByVal body) 
On Error Resume Next 
If InStr(FileName, ":") = 0 Then FileName = Server.MapPath(FileName) 
Dim oStream 
Set oStream = CreateObject("ADODB.Stream") 
oStream.Type = 2 '設(shè)置為可讀可寫 
oStream.Mode = 3 '設(shè)置內(nèi)容為文本 
oStream.Charset = "UTF-8" 
oStream.Open 
oStream.Position = oStream.Size 
oStream.WriteText body 
oStream.SaveToFile FileName, 2 
oStream.Close 
Set oStream = Nothing 
If Err.Number <> 0 Then Err.Clear 
End Function 


調(diào)用示例: 

Dim strContent 
Dim filePath 
FilePath="../text.txt" 
strContent = "服務(wù)器之家 www.zmynmublwnt.cn" 
CreatedTextFiles filePath, strContent'生成UTF-8編碼的文件

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久久资源网 | 港台三级在线观看 | 九九视频精品在线观看 | 天天夜干 | 亚洲一级毛片 | 中文字幕在线观看网址 | 亚洲综合视频一区 | 99久久久国产精品露出 | 成人综合在线观看 | 日本一区视频在线观看 | 国产乱淫av片免费观看 | 精品久久久一二三区播放播放播放视频 | 国产孕妇孕交大片孕 | 黄色av网站在线观看 | 毛片免费看的 | 国产乱淫a∨片免费视频 | 亚洲性一区 | 国产精品视频 | 免费在线观看成年人视频 | 女女久久 | 亚洲一区二区三区91 | 久久99精品久久久久久236 | 日韩999| 国产人成免费爽爽爽视频 | 黄视频免费在线 | 国产一级片91 | 在线中文字幕网站 | 色999中文字幕 | 又黄又爽又色无遮挡免费 | 99爱国产精品 | 日本成人一二三区 | 曰韩毛片| 欧美一区在线观看视频 | 一级成人欧美一区在线观看 | 多男操一女视频 | 亚洲男人的天堂在线视频 | 国产精品成人亚洲一区二区 | 色999国产| 黄色片免费看看 | 91精品国产91久久久久久蜜臀 | 国产一级性生活视频 |