2010年9月14日 星期二

[aspx]utf8完全征服

我們知道現實,utf8現在是網頁上處理多國語言及與 ajax 互動的文字編碼。我們非得處理它不可。

當你在 aspx 上面寫好 charset=”UTF-8”,並不代表你把工作都做完了。還有一些工作要做。

(1) 在 head 裡加上 <meta http-equiv='Content-type' content='text/html; charset=UTF-8' />
這只是告訴 browser 會是UTF-8。但是不代表我們傳送出去的真的是UTF-8,得要另外想辦法。特別是 ashx,也沒地方加這個東西。

(2) 如果使用 Response.Write 方式輸出,就要改變 Response 的編碼。
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.Write(something);
something 是 .Net 的字串(string)。因此,你得確定 something 是 unicode 編碼而不是UTF-8或其他系統編碼。如此 Response.Write 輸出才會是對的 UTF-8。

(3) 在網頁中的連結或 Query String,例如 <a href=”http://localhost.com/中文連結”>你的連結</a>。
這種你可以賭,browser不會幫你做urlencode,且原來編碼跟你伺服器預設編碼一樣。但是請不要這樣做。直接在位置列打的連結會被urlencode,而在頁面上的則視不同瀏覽器有不一樣的結果,再加上每個使用者的預設編碼不一樣,你會被搞死。因此,幫自己一個忙,在連結上的中文字串,記得用 System.Web.HttpUtility.UrlEncode(dotnetstring, System.Text.Encoding.UTF8) 做編碼的動作。如此的連結所產生的 Request,IIS會正確地翻譯回正確的 .Net string。Query String 也是一樣的道理,產生正確的 urlencode 給瀏覽器,當 Request 送回來的時候,直接取用 Request.QueryString 就會是正確的值了。

(4) 如果你有需要從別的網頁拿資料回來,而使用 WebClient 要求資料。如果確定對方回來的字串是UTF-8,直接使用
WebClient wc = new WebClient();
string response = wc.DownloadString(theURL);
response裡面會出現亂碼。要改成
string response = System.Text.Encoding.UTF8.GetString( wc.DownloadData(theURL));

你以為已經轉好UTF-8了,要怎麼測試呢?有一個字「菓」不在big5編碼裡,可以拿這個字來測試你的系統。

2010年9月13日 星期一

[xml]escape

為了要在 xml 裡傳遞另一個 xml。要把被傳的那一個先變成一般的字串。那麼,<, >, 這類的被 xml 拿來當做分隔符號的符號,就要被轉換成其他樣子啦。到底,有哪些符號需要被轉換呢?

原來 轉換
> &gt;
< &lt;
& &amp;
" &quot;
' &apos;

好像就這麼 5 個就行了。

2010年8月18日 星期三

[webdav]從windows7連上mac的webdav

mac的webdav設定,好像沒有GUI可以設定,所以,要先用指令的方式設定好。(http://manas.tungare.name/blog/howto-setup-webdav-on-mac-os-x-leopard-for-syncing-omnifocus-to-iphone/)

但是要注意的是,認證的問題。因為據說 windows 7 不允許使用所謂的 basic 的認證。不論是win7當server還是client(http://www.slickit.ca/2009/07/webdav-on-windows-7.html)。所以 AuthType Basic 這種設定是不行的。

請使用原來 conf 裡的設定,也就是

AuthType Digest
AuthName "webdav access"


然後使用 htdigest 來產生密碼檔,例如


sudo htdigest -c /etc/httpd/passwords/webdav.digest "webdav access" greg


如此就能從 windows 7 連上了。

2010年7月21日 星期三

[linux]ubuntu 裝好之後

在 ubuntu 裝好之後,第一個也是最重要的是加上無線網卡。
沒有網路的電腦,就是翅膀折斷的天使
現在的電腦怎麼沒有網路呢?
因為公司的環境已經是無線化了,所以買了個無線網卡。
本想說,特地買一個無線網卡上有寫支援 linux 的,一定就沒有問題。
我錯了,就是剛好 ubuntu 有問題。http://blog.tenyi.com/2010/06/rt2870rt3070linuxdriver.html

好,下一個就是要裝vmware player。這個裝好之後,
就可以把 windows 的裝進去,畢竟伺服器的維護不是我一個人。
也沒辦法執意說換 linux 就換 linux。若是我人不在,出現問題沒人能處理怎辦?
所以主要的伺服器還是得用 vmware 裡裝 windows。
那為何不直接裝 windows 當伺服器就好呢?
原因也很簡單。我買不起硬體 raid,我要用軟體 raid,windows 沒有。

另外,當 windows 每年推出新的產品,就把舊的產品線關閉。
每次功能上的改進,就代表原來的系統有轉移的必要。
windows 裡的功能要轉移若是沒跟上,之後就找不到工具可以轉移了,就變成所謂的遺產軟體。
在沒有原始碼的狀況下,很難用程式去轉移。
我已經累了不想每三年就換個電腦,就必須換 os,就必須把資料轉移。
雖然這是強迫整理資料的手段之一,資料久了就打不開,這是一定的,因為程式不能跑了。
每次換電腦都很痛苦…

[linux]ubuntu 與 EDIMAX EW-7711UMn USB無線網卡

以為解決了連線問題,從此就過著幸福快樂的生活了。
(參閱http://betabetaparticle.spaces.live.com/blog/cns!BBBC80E91904D8D!1365.entry
http://blog.tenyi.com/2010/06/rt2870rt3070linuxdriver.html)
錯!
看來這兩個星期的狂操(其實就是一直開著,不關機的 server 而已)
三不五時就斷線,後來查看 dmesg 就發現一連串的「裝置錯誤或移除」。
只要拔下來,再插回去,就會回復正常,但是不到一分鐘,就又出現斷線的情況。
反正我覺得它就是壞掉了。
希望黃色小屋可以讓我退,7/8買的,現在7/19,已經快過了兩個星期了。

[www]webdav是什麼?

最近為了公事,需要一些簡單的檔案分享。
生活在舊世界的我,當然會想到的就是ftp跟網路芳鄰。
當然我們也知道ftp現在很少人會想用,而網路芳鄰只能在區域網路內。
接下來就是往www常看到的功能去想。
為了要在www分享,我當然想說自己寫asp .net來做,卻感覺好像多此一舉。
不然就要找一個架站軟體,把它架起來,又覺得殺雞用牛刀,設定就搞死我了。
而且,將來維護要是沒人會,那我一個人怎辦?我又不是MIS每天只顧伺服器。

不小心看到一個名詞對我來說很新鮮,叫做 webdav,好像可以滿足我的需要。
查了半天,資料從1999到2003就沒了,難道後來都沒人用了嗎?
或者是,大部份軟體都內含進來了,所以就不再大聲討論了嗎?
這個答案我不知道,也許接下來幾天我會看到正確解答。

是的,就在幾天後,我看到了 IIS 裡,已經內建了這個功能。
http://technet.microsoft.com/zh-tw/library/cc781730%28WS.10%29.aspx
http://blog.l-penguin.idv.tw/archives/589

當然,Apache 也有 webdav 的模組
http://andres.jaimes.net/setting-up-a-webdav-server/
http://smallken.no-ip.org/blog/2009/03/22/linux/ubuntu/1232.html

Mac 的用戶,也不用擔心。同樣也能當 webdav 的 server
http://manas.tungare.name/blog/howto-setup-webdav-on-mac-os-x-leopard-for-syncing-omnifocus-to-iphone/

改天再來試。

ref:
http://en.wikipedia.org/wiki/WebDAV

2010年7月19日 星期一

[trac]幫trac加上svn功能

前文所講的最簡單安裝,不含svn功能。而這個功能,大家都是很想要的。該如何做?

(1)安裝svn server,網路上就有很多不同的方法。最偷懶的就是裝 VisualSVN Server。http://www.visualsvn.com/server/download/  下載VisualSVN-Server-2.1.2.msi。別跟 VisualSVN 搞錯喔,請認明 Server。

(2)安裝 svn-python 的 binding。http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=11129&expandFolder=11129&folderID=91  下載svn-python-1.6.6.win32-py2.6.exe。別跟 PySVN 搞錯喔,請認明svn-python

(3)接下來就是設定了。