﻿# 如何讓 Lynx 純文字瀏覽器讀取 UTF-8 的 ASP.NET 網頁

這個問題困擾我好久，但是現在終於被我給解決啦，想想也真是功德一件，自己蠻開心的！ 

**問題說明**

> 到目前為止，好像還沒有人可以用 Lynx 這套純文字瀏覽器讀取用 UTF-8 編碼的網頁，因為這套軟體實在太冷門，所以至今也沒有人幫忙解決這個問題。

**需求 for 身心障礙同胞**

> 在國內卻有許多身心障礙同胞使用 Lynx 這套軟體，最近因為我們公司正在積極建置一個無障礙的網站，光是想到 UTF-8 編碼的網頁無法讓這些身心障礙同胞使用到我們製作的網站服務，就覺得內心實在有股衝動想趕快解決這個問題！

**需求 for 製作無障礙網站的 ASP.NET 2.0 開發人員**

> 我想大多數 ASP.NET 開發人員不懂 Linux 作業系統，唯一能使用 Lynx 軟體測試的方式，就是在 Windows 主機上使用 [Cygwin](http://www.cygwin.com/ "Cygwin (另開視窗)") + [Lynx](http://lynx.browser.org/ "Lynx Information (另開視窗)") 軟體進行測試，不過我今天研究出來一個最簡單、最容易、最省時省力的方式，讓你的 ASP.NET 網站伺服器看到使用 Lynx 上網的瀏覽者，就改以 BIG5 的方式回應輸出編碼字集！

**解決方案**

> 在 ASP.NET 2.0 新增了一個特殊的資料夾，叫做 App\_Browsers，ASP.NET 會使用這些檔案來辨識個別瀏覽器並判斷它們的功能與應該回應的方式。
> 
> 你只要在你的 Web Application 根目錄建立這個目錄，並建立一個 Lynx.browser 檔案，檔案裡面的內容如下：
> 
> ```html
> <!--
>     You can find existing browser definitions at
>     <windir>\Microsoft.NET\Framework\<ver>\CONFIG\Browsers
> -->
> <browsers>
>   <browser id="Lynx" parentID="Default">
>     <identification>
>       <userAgent match="Lynx/\d+\.\d+" />
>     </identification>
>     <capture>
>       <userAgent match="Lynx/(?'version'(?'browserMajorVersion'\d+)\.(?'browserMinorVersion'\d+))" />
>     </capture>
>     <capabilities>
>       <capability name="browser" value="Lynx" />
>       <capability name="version" value="${version}" />
>       <capability name="majorVersion" value="${browserMajorVersion}" />
>       <capability name="minorVersion" value="${browserMinorVersion}" />
>       <capability name="preferredRequestencoding" value="big5" />
>       <capability name="preferredResponseencoding" value="big5" />
>     </capabilities>
>   </browser>
> </browsers>
> ```
> 
>   
> **夠簡單吧！**這要照這樣子做，你的網站只要遇到 Lynx Browser 上網，馬上就可以「自動」變成 Big5 編碼摟！ **真心感謝 ASP.NET 這個漂亮的 Web 開發架構！**

**注意事項**

-   如果在你的網頁中有使用到以下這個 meta 標籤，請將他移除：
    
    ```html
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    ```
    
-   並將以下的程式碼加到你的 MasterPage 或 Page 的 Code Behind 的 Page\_Load 事件中：
    
    ```csharp
    public partial class MasterPage : System.Web.UI.MasterPage
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            HtmlMeta metaContentType = new HtmlMeta();
            metaContentType.HttpEquiv = "Content-Type";
            if (Request.Browser.Browser == "Lynx")
            {
                metaContentType.Content = "text/html; charset=big5";
            }
            else
            {
                metaContentType.Content = "text/html; charset=utf-8";
            }
    
            Page.Header.Controls.AddAt(0, metaContentType);
        }
    }
    ```
    
-   另外說明一下，如果你的網頁中的外部載入檔案 ( \*.css 或 \*.js ) 的話，如果檔案是用 UTF-8 編碼且內容中有非 ASCII 的字元，也有可能在使用 big5 瀏覽時造成網頁發生問題！但 Lynx 本來就不支援 CSS 與 JavaScript，所以也沒這個問題啦！但誰知道以後的 Lynx 版本會不會支援這些功能！
    

**參考資料**

1.  [MSDN: ASP.NET 網站配置](http://msdn2.microsoft.com/zh-tw/library/ex526337\(VS.80\).aspx "MSDN: ASP.NET 網站配置 (另開視窗)")
    
2.  [MSDN: 瀏覽器定義檔結構描述 (browsers 項目)](http://msdn2.microsoft.com/zh-tw/library/ms228122\(VS.80\).aspx "MSDN: 瀏覽器定義檔結構描述 (browsers 項目) (另開視窗)")
    
3.  [MSDN: HOW TO：在 ASP.NET Web 網頁中偵測瀏覽器類型](http://msdn2.microsoft.com/zh-tw/library/3yekbd5b\(VS.80\).aspx "MSDN: HOW TO：在 ASP.NET Web 網頁中偵測瀏覽器類型 (另開視窗)")
