2012年11月12日 星期一

vb.程式間隔一段時間執行一次

剛好看到...雖然不符合要用的需求但或許之後用的到..先記錄下來



Private Sub Form_Load()
Timer1.Interval = 1000'把timer1設置成每隔一秒种觸發一次timer事件
End Sub

Private Sub Timer1_Timer()
Static a As Integer, b As Integer'全局變量
a = 1
If a = 60 Then b = 1:a=0'如果a=60了,就證明已經過了一分鐘了。那麼b再加上+1,如果b=5那麼就已經過了5分鐘了。
If b = 5 Then
'這後面寫你想執行的代碼
end if
End Sub

2012年11月9日 星期五

asp網頁編碼big5->utf8處理辦法


處理很久搞不定的big5 透過post將資料傳到utf-8的頁面會出現中文亂碼問題...
總算找到個解決方法..記錄起來
轉錄自:Itano Tomomi

asp網頁採用的編碼(encoding)是用系統預設的語系,在windows 2003底下是big5。那該如何將big5轉成utf8呢?這很簡單(不是團結的故事),使用Session.CodePage跟Server.UrlEncode()就可以了。
sourceURL = "http://itanotomomi.akb48/板野友美.htm"
dim i,utf8URL,tmp,encodingStr

for i=1 to Len(sourceUrl)
  tmp = mid(sourceUrl, i, 1)
  if asc(tmp) < 0 or asc(tmp) > 128 then  '將ascii碼在1~128以外的字元當成中文編成utf8
    Session.CodePage="65001" '先將網頁設成utf8
    encodingStr = Server.UrlEncode(tmp) '將中文編成utf8
    Session.CodePage="950" '再將網頁設為Big5
    utf8URL = utf8URL & encodingStr
  else
    utf8URL = utf8URL & tmp
  end if
next
為什麼要這樣做呢?因為asp使用Server.UrlEncode()進行編碼是採用系統預設的語系,若不更改網頁的語系為utf8,直接使用Server.UrlEncode()的話,會編成big5。而且千萬記得,編成utf8後,要再將Session.CodePage指定回big5,不然以big5為主的asp網站會整個亂掉。
不過若到上面為止,就想直接將encodingStr用response.redirect送出的話,會發現還是找不到網頁。那是因為response.redirect在導向的過程會採用系統預設的語系再編碼過一次...orz...
我目前解決的方式是不用response.redirect,改使用javascript的window.open()。不過缺點是會被瀏覽器擋住。
response.write "<script type='text/javascript'>window.open('" & utf8URL & "');</script>"
以上是純ASP的解決方法,接著介紹透過ASP.NET的解法。
首先是ASP端,將url編碼丟給ASP.NET。這邊採用預設編成big5就可以了,反正主要處理在ASP.NET端。 
sourceURL = "http://itanotomomi.akb48/板野友美.htm"
Response.Redirect "http://itanotomomi.akb48/passUTF8.aspx?q=" & Server.UrlEncode(sourceUrl)
接著在passUTF8.aspx.cs的Page_Load(若使用VB則是passUTF8.aspx.vb)中撰寫下面的語法。
string sourceURL = Request.Url.Query;
sourceURL = HttpUtility.UrlDecode(sourceURL, Encoding.GetEncoding("big5")); //將asp用big5傳來的url decode
sourceURL = sourceURL.Replace("?q=", "");
Response.Redirect(sourceURL);
因為ASP.NET使用utf8,所以將asp傳來的url編成utf8後就可以直接使用Response.Redirect()丟出去了。