﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-杨的空间-文章分类-WEB程序设计</title><link>http://www.cnitblog.com/yhf119/category/1298.html</link><description>业精于勤，荒于嬉，行成于思，毁于随</description><language>zh-cn</language><lastBuildDate>Mon, 26 Sep 2011 10:37:31 GMT</lastBuildDate><pubDate>Mon, 26 Sep 2011 10:37:31 GMT</pubDate><ttl>60</ttl><item><title>[asp]让你知道codepage的重要</title><link>http://www.cnitblog.com/yhf119/articles/4324.html</link><dc:creator>杨</dc:creator><author>杨</author><pubDate>Fri, 11 Nov 2005 02:08:00 GMT</pubDate><guid>http://www.cnitblog.com/yhf119/articles/4324.html</guid><wfw:comment>http://www.cnitblog.com/yhf119/comments/4324.html</wfw:comment><comments>http://www.cnitblog.com/yhf119/articles/4324.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/yhf119/comments/commentRss/4324.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yhf119/services/trackbacks/4324.html</trackback:ping><description><![CDATA[<P>这几天研究UTF-8编码，太晕了，把我的看法和各位讨论讨论。<BR>欢迎来批啊。以下都是我的想法，哪里有不对的请不吝赐教，帮忙指出来。</P>
<P>相关的题外话：</P>
<P>一、操作系统<BR>window系统内部都是unicode的。文件夹名，文件名等都是unicode的，任何语言系统下都能正常显示。</P>
<P>二、输入法：<BR>微软拼音输出的是Unicode的，智能ABC输出是简体中文的（所以智能ABC在非简体中文系统根本不能用，只能打英文）。</P>
<P>三、网页的textarea<BR>网页的textarea是用unicode显示的。所以往里打什么字都能显示。而一些flash做的输入框就不行了。</P>
<P>四、Access2000<BR>access里面保存的数据是unicode的，在任何语言系统下都能显示。<BR>如果数据视图查看有些字符不正常，那是因为显示所用的字体不是Unicode字体，<BR>换用Arial Unicode MS 字体就能全部显示了。（access帮助，搜索，输入unicode，有说明）</P>
<P>五、Word<BR>word里的繁简转换，简体转换到繁体后，内码仍是简体中文的，其实只是简体中的繁体字。</P>
<P>六、ASP内部是Unicode的，所有文本都是Unicode存储的。需要时转换到指定字符集。</P>
<P>首先说下结论：<BR>&lt;%@ codepage=936%&gt;简体中文<BR>&lt;%@ codepage=950%&gt;繁体中文<BR>&lt;%@ codepage=65001%&gt;UTF-8</P>
<P>codepage指定了IIS按什么编码读取传递过来的串串（表单提交，地址栏传递等）。</P>
<P>也指定了所有文本变量从Unicode转换到的编码，<BR>也就指定了从数据库取出的数据从Unicode转换到的编码。（注意这个，很重要。）</P>
<P>关键字：<BR>读取：一个串串，按简体读取是一些字，按繁体读取是一些字，串串本身编码没有变。</P>
<P>转换：系统主动的转换，比如从Unicode的“化”字到Big5的“化”字，内码变成Big5的。如果Big5没有对应的字，保留Unicode形式（&amp;#xxxx;）</P>
<P>简体中文：化六个结论<BR>Unicode16进制形式：&amp;#x5316;&amp;#x516d;&amp;#x4e2a;&amp;#x7ED3;&amp;#x8bba;<BR>Unicode10进制形式：&amp;#21270;&amp;#20845;&amp;#20010;&amp;#32467;&amp;#35770;</P>
<P>下面是我推测出来的编码转换的过程：<BR>客户端：输入法Unicode--输入框unicode--从Unicode按charset转换到对应编码()--表单发送编码</P>
<P>服务器端：IIS解开表单编码--按codepage指定编码读取--转换到对应的Unicode--可以用request("")读取了--进行一些处理--以Unicode编码保存到数据库</P>
<P>服务器端：读取数据库的Unicode数据，转换到codepage指定编码---生成源代码--IE按charset读取显示。</P>
<P>下面举例说明：<BR>例一：<BR>假设有三个asp页面，典型的留言页面：<BR>1.write.asp 简单的输入表单，提交到add.asp。<BR>&lt;META http-equiv="Content-Type" content="text/html; charset=big5"&gt;<BR>2.add.asp 接收留言，保存到数据库<BR>&lt;%@ codepage=936%&gt;<BR>3.read.asp 从数据库取得留言，显示。<BR>&lt;%@ codepage=936%&gt; charset=GB2312 或<BR>&lt;%@ codepage=950%&gt; charset=big5</P>
<P>大家可以猜一猜，我在write.asp里用微软拼音输入法输入“化六个讨论”。最后在read.asp里会显示什么样？<BR>是不是晕了。让我们从头分析。</P>
<P><A class="" href="http://www.blueidea.com/articleimg/2004/11/2351/20041120172251545.gif" target=_blank><IMG height=414 alt="" src="http://www.blueidea.com/articleimg/2004/11/2351/20041120172251545-s.gif" width=510 border=0></A></P>
<P>例二：<BR>把例一的add.asp的&lt;%@ codepage=936%&gt;改为&lt;%@ codepage=950%&gt;，又会怎么样呢？</P>
<P><A class="" href="http://www.blueidea.com/articleimg/2004/11/2351/20041120172251358.gif" target=_blank><IMG height=414 alt="" src="http://www.blueidea.com/articleimg/2004/11/2351/20041120172251358-s.gif" width=510 border=0></A></P>
<P>到这里发现了什么？<BR>1．如果输入的文字和Charset对应的不同，一转换，就可能出现Unicode形式的字了。这里就是原因所在。以后整个过程都保留着。<BR>2．Add.asp里codepage决定了保存到数据库的文字，用的是哪个语言对应的Unicode.如codepage=936，<BR>那么数据库保存的就是简体中文的Unicode（数据库拿回简体中文系统，一切正常的），<BR>codepage=950保存的就是繁体中文的Unicode.（拿回简体中文系统，就不对了）。</P>
<P>3．注意一下串串的变化过程：</P>
<P>1)输入法---CharsetUnicode----指定字符集的映射<BR>2)Charset----表单编码串串简单编码<BR>3)表单解码上步的逆过程，两步抵消了。<BR>4)串串à按codepage读取串串没变，这步有可能“误会读取” <BR>5)转为对应的Unicode Codepage指定字符集----Unicode映射<BR>6)中间处理，进数据库无变化，直接以Unicode形式进入<BR>7)按codepage读取数据库 Unicode----codepage指定字符集的映射<BR>8)显示，按Charset指定字符集读取串串没变。</P>
<P>以例一说明：</P>
<P><IMG height=252 alt="" src="http://www.blueidea.com/articleimg/2004/11/2351/20041120172251892.gif" width=483 border=0></P>
<P>例二：</P>
<P><IMG height=252 alt="" src="http://www.blueidea.com/articleimg/2004/11/2351/20041120172251123.gif" width=483 border=0></P>
<P>晕了。现在来用用知识。</P>
<P><B>案例1。</B><BR>简体中文系统下跑的好好的代码，放到国外空间上，数据库里乱码，原有的数据也乱码。<BR>分析：因为大多数人平时用的都是简体中文系统，默认的codepage=936，所以平时大家不写也没有关系。<BR>但到了国外空间问题就出来了。从数据库里的Unicode转换到英文编码去了，所以数据库原有的简体中文转换到英文后，按GB显示自然乱码。<BR>如图，新输入的文字显示正常，但数据库里保存的是英文的Unicode的。<BR>解决方法：全部加上&lt;%@codepage=936即可%&gt;。<BR>全程只有简体中文与对应Unicode间的转换。</P>
<P><IMG height=239 alt="" src="http://www.blueidea.com/articleimg/2004/11/2351/20041120172251463.gif" width=375 border=0></P>
<P><STRONG>案例二：<BR></STRONG>简体中文的代码和数据，想转为完全的繁体版，该怎么办？<BR>分析：1。代码文件编码全部改为Big5的，文件本身保存编码选繁体。<BR>2．&lt;%@ codepage=936 %&gt;<BR>3.Charset=big5<BR>4.access版本无所谓，因为access里的数据是Unicode的。<BR>5.好了，代码可以在纯繁体系统下跑了。<BR>6.遗留问题：原有的简体中文数据读出会有一些问号。效果同例一的950读取，big5显示。因为从简体中文的Unicode转换到繁体中文了，有些字繁体中没有，就会出问号。<BR>7.解决：用一个临时asp页，codepage=65001，读出为简体中文的Unicode，用一个Unicode-&gt;Big5的函数，转为繁体中文，然后写回数据库，应该行了吧？<BR></P>
<P>两个案例完全是我按照理论推导出来了，未经证实。<BR>有类似经历的欢迎批评指正。</P>
<P>论坛的相关讨论：<A href="http://www.blueidea.com/bbs/NewsDetail.asp?id=1831362">http://www.blueidea.com/bbs/NewsDetail.asp?id=1831362</A></P>
<P align=right>出处：<A href="http://www.blueidea.com/">蓝色理想</A> <BR>责任编辑：<A href="http://www.blueidea.com/common/contact.asp?type=编辑&amp;username=蓝色" target=_blank>蓝色</A></P><img src ="http://www.cnitblog.com/yhf119/aggbug/4324.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yhf119/" target="_blank">杨</a> 2005-11-11 10:08 <a href="http://www.cnitblog.com/yhf119/articles/4324.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实用Javascript代码集合</title><link>http://www.cnitblog.com/yhf119/articles/4299.html</link><dc:creator>杨</dc:creator><author>杨</author><pubDate>Thu, 10 Nov 2005 09:19:00 GMT</pubDate><guid>http://www.cnitblog.com/yhf119/articles/4299.html</guid><wfw:comment>http://www.cnitblog.com/yhf119/comments/4299.html</wfw:comment><comments>http://www.cnitblog.com/yhf119/articles/4299.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/yhf119/comments/commentRss/4299.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yhf119/services/trackbacks/4299.html</trackback:ping><description><![CDATA[<STRONG>禁止屏蔽类：</STRONG><BR><BR>1.禁止右键<BR>&lt;body oncontextmenu=return(false)&gt; <BR><BR>2.禁止选择<BR>&lt;body onselectstart="return false"&gt;<BR><BR>3.禁止粘贴<BR>&lt;body onpaste="return false"&gt;<BR><BR>4.禁止直接访问 [必须框架内才行]<BR>&lt;script&gt;<BR>if (top == self)top.location.href = "page.htm"; <BR>&lt;/script&gt;<BR><BR>5.禁止frame引用<BR>&lt;script&gt;<BR>if (top != self)top.location.href = "page.htm"; <BR>&lt;/script&gt;<BR><BR>6.禁止功能键Shift,Alt,Ctrl<BR>&lt;script&gt;function key(){ <BR>if(event.shiftKey) alert("Shift不允许使用!");} document.onkeydown=key; &lt;/script&gt;<BR><BR><BR><STRONG>数据取得类<BR></STRONG><BR>1.取得分辨率<BR>&lt;script&gt;document.write("宽为"+screen.Width+"高为"+screen.Height)&lt;/script&gt;<BR><BR><BR>2.取得地址栏<BR>&lt;script&gt;document.write(self.location)&lt;/script&gt;<BR><BR>3.取得地址栏?后参数<BR>&lt;SCRIPT&gt;var add = top.location;<BR>add = add.toString();<BR>document.write (add.substring(add.indexOf("?")+1,add.length));<BR>&lt;/SCRIPT&gt;<BR><BR><BR><STRONG>常用特效类</STRONG><BR><BR>1.主页遥控器<BR>文件一.(t1.html)<BR>&lt;SCRIPT language="JavaScript"&gt;<BR>window.open("t2.html","_blank","width=200","height=200","scroll=no");<BR>&lt;/SCRIPT&gt;<BR>文件二.(t2.html)<BR>&lt;SCRIPT language="JavaScript"&gt;<BR>function op(add){if (window.opener){window.opener.document.location = add;}}<BR>&lt;/SCRIPT&gt;<BR>&lt;a href=# onClick="op('link1.html')"&gt;地址1 &lt;/a&gt;&lt;br&gt;&lt;a href=# onClick="op('link2.html')"&gt;地址2 &lt;/a&gt;&lt;br&gt;&lt;a href=# onClick="op('http://music.jx165.com')"&gt;地址3 &lt;/a&gt;<BR><BR>2.只弹一次的窗口<BR>&lt;script&gt;<BR>function get_cookie(Name) {<BR>var search = Name + "="<BR>var returnvalue = "";<BR>if (document.cookie.length &gt; 0) {offset = document.cookie.indexOf(search)<BR>&nbsp;&nbsp;&nbsp; if (offset != -1) {offset += search.length;end = document.cookie.indexOf(";", offset);<BR>&nbsp;&nbsp;&nbsp; if (end == -1)end = document.cookie.length;returnvalue=unescape(document.cookie.substring(offset, end))}<BR>}<BR>return returnvalue;<BR>}<BR>function jx165ad(){<BR>if (get_cookie('jx165ad')==''){<BR>document.cookie="jx165ad=yes"<BR>window.open("ad.html","_blank","width=200","height=200","scroll=no");<BR>}<BR>else {}<BR>}<BR>&lt;/script&gt;<BR>&lt;body&gt;<BR>&lt;script&gt;<BR>jx165ad();<BR>&lt;/script&gt;<BR><BR>3.鼠标放在连接上强行点击(有点不地道，最好别用)<BR><BR>&lt;script&gt;&nbsp; <BR>function mClk2() {var source=event.srcElement;if (source.tagName=="A"){source.click();self.focus();}}&nbsp; <BR>document.write("&lt;div onmouseover=mClk2();&gt;");&nbsp; <BR>&lt;/script&gt;<BR><img src ="http://www.cnitblog.com/yhf119/aggbug/4299.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yhf119/" target="_blank">杨</a> 2005-11-10 17:19 <a href="http://www.cnitblog.com/yhf119/articles/4299.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ASP生成静态网页的方法</title><link>http://www.cnitblog.com/yhf119/articles/4298.html</link><dc:creator>杨</dc:creator><author>杨</author><pubDate>Thu, 10 Nov 2005 09:17:00 GMT</pubDate><guid>http://www.cnitblog.com/yhf119/articles/4298.html</guid><wfw:comment>http://www.cnitblog.com/yhf119/comments/4298.html</wfw:comment><comments>http://www.cnitblog.com/yhf119/articles/4298.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/yhf119/comments/commentRss/4298.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/yhf119/services/trackbacks/4298.html</trackback:ping><description><![CDATA[　　随着网站访问量的加大，每次从数据库读取都是以效率作为代价的，很多用ACCESS作数据库的更会深有体会，静态页加在搜索时，也会被优先考虑。互联网上流行的做法是将数据源代码写入数据库再从数据库读取生成静态面，这样无形间就加大了数据库。将现有的ASP页直接生成静态页，将会节省很多。<BR><BR>　　下面的例子是将、index.asp?id=1/index.asp?id=2/index.asp?id=3/这三个动态页面，分别生成ndex1.htm,index2.htm,index3.htm存在根目录下面：<BR><BR>
<CENTER>
<TABLE cellSpacing=0 cellPadding=0 width="90%" border=0>
<TBODY>
<TR>
<TD class=smalltxt>&nbsp; <B>CODE:</B></TD>
<TD align=right><A class=smalltxt onclick="copycode(findobj('code0'));" href="http://www.im286.com/viewthread.php?tid=1034450&amp;extra=page%3D1#"><FONT color=#003366>[Copy to clipboard]</FONT></A>&nbsp;&nbsp;</TD></TR>
<TR>
<TD colSpan=2>
<TABLE cellSpacing=1 cellPadding=10 width="100%" bgColor=#ffffff border=0>
<TBODY>
<TR>
<TD class=altbg2 id=code0 style="WORD-BREAK: break-all" width="100%">&lt;%<BR>dim strUrl,Item_Classid,id,FileName,FilePath,Do_Url,Html_Temp<BR>Html_Temp="&lt;UL&gt;"<BR>For i=1 To 3<BR>Html_Temp = Html_Temp&amp;"&lt;LI&gt;"<BR>Item_Classid = i<BR>FileName = "Index"&amp;Item_Classid&amp;".htm"<BR>FilePath = Server.MapPath("/")&amp;"\"&amp;FileName<BR>Html_Temp = Html_Temp&amp;FilePath&amp;"&lt;/LI&gt;"<BR>Do_Url = "http://"<BR>Do_Url = Do_Url&amp;Request.ServerVariables("SERVER_NAME")&amp;"/main/index.asp"<BR>Do_Url = Do_Url&amp;"?Item_Classid="&amp;Item_Classid<BR>strUrl = Do_Url<BR>dim objXmlHttp<BR>set objXmlHttp = Server.CreateObject("Microsoft.XMLHTTP")<BR>objXmlHttp.open "GET",strUrl,false<BR>objXmlHttp.send()<BR>Dim binFileData<BR>binFileData = objXmlHttp.responseBody<BR>Dim objAdoStream<BR>set objAdoStream = Server.CreateObject("ADODB.Stream")<BR>objAdoStream.Type = 1<BR>objAdoStream.Open()<BR>objAdoStream.Write(binFileData)<BR>objAdoStream.SaveToFile FilePath,2 <BR>objAdoStream.Close()<BR>Next<BR>Html_Temp = Html_Temp&amp;"&lt;UL&gt;"<BR>%&gt;<BR>&lt;%<BR>Response.Write ( "成功生成文件：" )<BR>Response.Write ( "&lt;BR&gt;" )<BR>Response.Write Html_Temp<BR>%&gt;</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></CENTER><img src ="http://www.cnitblog.com/yhf119/aggbug/4298.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/yhf119/" target="_blank">杨</a> 2005-11-10 17:17 <a href="http://www.cnitblog.com/yhf119/articles/4298.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>