一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

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

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

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

2019-09-19 11:54asp教程網 ASP教程

ASP動態網頁下UTF-8頁面亂碼+GB2312轉UTF-8 +生成UTF-8格式的文件(編碼)

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

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

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

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轉UTF-8 

'個人代碼風格注釋(變量名中第一個小寫字母表表示變量類型) 
'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 

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



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

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

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

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

我們是無法用這個函數來創建UTF-8格式文件的。 
這時候,我們可以使用 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 是一種字符集,包括大小寫的英文字母、數字、控制字符等,它用一個字節表示,范圍是 0-127。 

由于 ASCII 表示的字符非常有限,各個國家或者地區在此基礎上提出了自己的字符集,比如在中國應用非常廣泛的 GB2312,它為漢字提供了編碼,用兩個字節表示。 

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

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

完整示例: 

'================================================ 
'函數名:CreatedTextFiles 
'作 用:創建文本文件 
'參 數:filename ----文件名 
' body ----主要內容 
'================================================ 
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 '設置為可讀可寫 
oStream.Mode = 3 '設置內容為文本 
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 


調用示例: 

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 青草娱乐极品免费视频 | blacked亚裔videoshd| 久久精品视在线观看85 | 青青草综合网 | 国产成人在线视频 | 毛片一区二区三区提莫影院 | 公交车揉捏大乳呻吟喘娇 | 亚洲 另类 欧美 变态屎尿 | 亚欧国产 | 天堂樱桃bt在线www | 精品免费视频 | 美女被到爽流动漫 | 男人看片网址 | 女人日男人 | 亚洲福利电影一区二区? | 久久棋牌评测 | 4s4s4s4s色大众影视 | 91丝袜足控免费网站xx | 国产精品国产三级在线专区 | 羞羞视频免费观看网站 | 91精品手机国产在线观 | 亚洲四虎永久在线播放 | 国产一区二区不卡视频 | 色漫在线观看 | 好 舒服 好 粗 好硬免费视频 | 四虎国产精品视频免费看 | 高h辣文小说网 烧书阁 | 色老板在线视频观看 | 午夜十八岁禁 | 99福利在线观看 | 青草免费在线观看 | 免费一区在线观看 | 久久国产乱子伦精品免费不卡 | 青青青在线视频 | caoporn国产 | 美艳教师刘艳第三部166 | 操操小说 | 日本h乱淫动漫在线观看 | 9966久久精品免费看国产 | 色中色软件 | 俄罗斯精品bbw|