顯示具有 com 標籤的文章。 顯示所有文章
顯示具有 com 標籤的文章。 顯示所有文章

2012年8月9日 星期四

[Asp].中文網域 doamain name (Punycode)

客戶反應一個問題, 要提供一個 URL在網頁裡, 由於包含中文字, 所以中文字被被編碼了.

要連到 URL:

https://law.全國法規.tw/

編修存檔後,透過 IE 瀏覽器, URL 點下去後變成(無法顯示網頁), 神奇的 google  chrome 可以連!

全國法規, UTF-8 編碼做 URLEncode 如下, IE 不能連.
https://law.%E5%85%A8%E5%9C%8B%E6%B3%95%E8%A6%8F.tw/

全國法規, Big5 編碼做 URLEncode 如下, IE 不能連.
https://law.%A5%FE%B0%EA%AAk%B3W.tw/

https://law.%A5%FE%B0%EA%AA%6B%B3%57.tw/


查了一下, 原來中文網域名要轉成 punycode 才行,
隨手下載了一個 ASP 版的轉換程式.
Punycode / IDN conversion code for classic ASP
http://www.simpledns.com/outbox/idn-convert-asp.zip

剛好遇到 "規" 這個字在使用 ASCW( ) 函數是會變成負數. 會出問題, trace 一下程式碼, 改改修修, 弄不出來, 正確解答應該轉換成:
https://law.xn--15q40leqvqi0a.tw/

可是我跑出來的結果有出入, 15q40l 變成 15q50l 實是在很無言, 又看不懂程式在做什麼. 於是改用 .net 來解決. 隨手寫了一個 .net 的 COM+. 最後當然是 Encode 轉換成功, 測試用的程式碼如下:



如果您的 IE 想讓 URL 從 Punycode 的符號變成中文字的話, 需要這樣子設定.





相關文章:
如何利用 IE 或 Firefox 查詢中文域名轉碼(Punycode)
http://blog.miniasp.com/post/2011/07/07/How-to-use-IE-and-Firefox-query-Punycode.aspx

Punycode
http://anferneehardaway.pixnet.net/blog/post/4946513-punycode

[Asp] Server.URLEncode 和 encodeURIComponent 的差別
http://maxtellyou.blogspot.tw/2012/07/asp-serverurlencode-encodeuricomponent.html


使用ASP呼叫C#寫的COM元件
http://maxtellyou.blogspot.tw/2012/03/aspccom.html

如何用 C# 開發的 DLL 讓 VB6 可以使用
http://smilelight-tw.blogspot.tw/2011/06/c-dll-vb6.html

2012年3月30日 星期五

使用ASP呼叫C#寫的COM元件

相關文章,請 google keyword: c# 建立 com dll asp create object

目前專案有一個需求, 要把舊系統搬到ipv6 的環境下運作, 其中一個遇到的問題就是ftp 元件, 這次的目標是要寫一個跟舊系統一模一樣的 COM.


●【 Step 1 】
┃  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
┃ 先上 http://www.codeproject.com 取得一個別人寫好的 ftpclient class.
請 google keyword: codeproject ftpclient


●【 Step 2 】
┃  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
┃ 參考看看這篇教學文章:
┃ → http://smilelight-tw.blogspot.com/2011/06/c-dll-vb6.html
◆ 依照教學文章裡的步驟, 在 Assembly Information 裡的 COM-Visible checkbox 打勾.
◆ 設置(Build)項目屬性裡, 把註冊 COM Interop checkbox 打勾.


●【 Step 3 】
┃  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
┃ 上面文章沒有使用 簽名(Signing) 的功能, 所以在其他電腦註冊 com 元件時會出現下面的提示訊息:



◆ 解法很簡單, 請執行 sn.exe 指令, 產生簽名檔:
"C:\PROGRA~1\Microsoft SDKs\Windows\v7.0A\bin\sn.exe" -k c:\yourAppName.snk

◆ 在專案設定裡的 簽名(Signing) 分頁中選取剛才產生的 yourAppName.snk 文件.


●【 Step 4 】
┃  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
┃ 最後一個步驟了, 註冊C#寫的DLL是不能用regsvr32的,要用regasm,格式為:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\regasm.exe /codebase  c:\yourProject\yourAppName.dll

如果程式寫錯, 要移除可以下指令:

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\regasm.exe /unregister c:\yourProject\yourAppName.dll






━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
◆ 結論 ◆
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1. 幾乎大部份的 .net 寫的 class 都可以轉換成 com 供 asp 呼叫.
2. 請避免使用「多形」(Polymorphism)的 method, 舊系統對多形的支援度似乎不太好.
3. 請避免在「建構方法(建構式)」(Constructor)裡使用參數, 舊系統對建構式的支援度似乎不太好.
4. 可以使用在 ipv6 上的 ftp com 寫好了.

Facebook 留言板