1. 程式人生 > >Asp.net utf-8 編碼中文亂碼完全解決方案

Asp.net utf-8 編碼中文亂碼完全解決方案



Unicode 編碼正逐漸成為多語言支援的最通用解決方案。採用 Unicode 編碼的中文網頁能在各種平臺、各種類的瀏覽器上都得到很好的相容。utf-8 是 Unicode 的一種儲存/交換實現方式。對於不同數值範圍的 Unicode 碼,它採用變長的方式來編碼:所有 ASCII 字元佔用1個位元組,大於 0x7f 的則佔用2到4位元組不等。可以看出,所有 ASCII 檔案直接相容 utf-8。另外,對於網頁原始碼這樣 ASCII 字元佔內容很大部分的檔案來說,它通常比其他 Unicode 儲存/交換格式(如utf-16,utf-32等)更節省空間。因此,utf-8 格式已在網站設計中廣泛的使用。

但是,在 asp.net 中文網頁中使用 utf-8 編碼時,稍不小心就會造成中文亂碼,令人頭疼。對於這個問題,網上很多地方建議:在必要的地方仍使用 GB2312 編碼。這樣顯然不是一個徹底的解決方案。本文討論瞭如何如何在 asp.net 網站中完全使用 utf-8 編碼。

在 Visual Studio 2005 中新建一個 asp.net 站點。在 web.config 檔案中設定站點使用 utf-8 編碼:

<?xml version="1.0"?>
...
<configuration>
    <system.web>
        <globalization
fileEncoding="utf-8" /> </system.web> <configuration> ...

這樣一來,VS 可以在一定程度上實現對 utf-8 的自動化支援,但不是很完善。經常還是會有亂碼問題。下面的討論在即使沒有設定站點編碼的情況下依然能有效解決中文亂碼問題。

建立一個 asp.net 頁面,並編寫程式碼如下:

<%--sample.aspx--%>

<%@ Page Language="C#"AutoEventWireup="true"    CodeFile="sample.aspx.cs"Inherits="sample"
%> <!DOCTYPEhtml PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>測試</title> </head> <body> <formid="form1"runat="server"> <asp:RadioButtonListID="RadioButtonList1"runat="server"> <asp:ListItem>舊日重來</asp:ListItem> <asp:ListItem>http://live.aulddays.com</asp:ListItem> </asp:RadioButtonList> <asp:ButtonID="Button1"runat="server"Text="Submit" OnClick="Button1_Click"/> <br/> <asp:LabelID="Label1"runat="server"></asp:Label> </form> </body> </html>

Visual Studio 2005 建立的頁面預設還是 GB2312 編碼,下一步將網頁轉換為 utf-8 編碼。這裡推薦使用 Microsoft Expression Web 工具。這個軟體的前身就是大名鼎鼎的 Frontpage。在更新為 Expresson Web 之後,它的功能又有了很大的增強,例如對 css 的加強支援、對 asp.net 控制元件甚至是 master page 的完美支援。因此可以說它是和 Visual Studio 2005 配合使用,編輯 asp.net 網頁的首選工具。

在 Expression Web 裡開啟剛才建立的 sample.aspx,在 Design 視圖裡右鍵選 Page Properties,在 Language 標籤裡將 Save the document as 設定為 Unicode (UTF-8),確定,儲存。這樣Expression Web 會自動在原始檔里加上檔案說明編碼的 <meta> 標籤,並且將硬碟上儲存的檔案自動轉換為 utf-8 格式。

再在 VS 中開啟,居然就產生了亂碼:

VS 2005 utf-8 亂碼

這是由於 VS 裡預設不檢測 utf-8 編碼,仍然按照 GB2312 的方式來解釋這個檔案。解決的方法有兩個。一是在 VS 的 tools -> Options 選單裡開啟 utf-8 強制檢查:

VS 2005 utf-8 檢測

二是為網頁原始碼加上 BOM (Byte-Order Mark) 標記,作為 Unicode 編碼方式的簽名(推薦使用,因為這樣可以保證在任何時候都能正確的檢測檔案編碼)。用 Ultraedit 開啟剛才的 aspx 檔案,點選 File -> Save as,在儲存對話方塊中 Format 下拉框裡選擇 UTF-8,以原始檔名覆蓋儲存即可。此時,在16進位制編輯模式下檢視可以看到檔案已經被加上了3個位元組的 BOM 標記:

utf-8 BOM 標記

當然,在 VS 的另存為對話方塊中點選 Save 按鈕右邊的下拉選單,並以 UTF-8 with signature 方式儲存也可以達到相同效果。

這樣,中文的 asp.net 網頁就已經以 utf-8 方式儲存並可以正常瀏覽了。下面為該網頁編寫按鈕相應程式碼:

using System;

public partial class sample : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        Label1.Text = "您選擇的是:" + 
            RadioButtonList1.SelectedValue;
    }
}

執行網頁,點選 Submit,再次出現亂碼!

執行亂碼

更詭異的是,如果在 VS 的偵錯程式裡看的話都是好的。查閱相關資料可以發現如下線索:asp.net 的原始碼編譯之後的編碼方式是和原始檔本身的編碼方式相同。因此,為了讓原始碼裡的字串也可以正常顯示和處理,需要把原始檔的儲存方式也改成 utf-8,這次用 VS 或 UltraEdit 直接另存為 utf-8 格式即可,記得順便選上帶 BOM 的儲存。這樣,網頁的顯示就完全正常了。

總結

如果在中文 asp.net 中使用 utf-8 編碼,需要做到以下幾點:

  1. html 程式碼中要加入定義檔案編碼的 <meta> 標記
  2. .aspx 檔案 和對應的原始碼檔案的物理儲存格式需要轉化為 utf-8
  3. 建議在程式碼檔案加入 BOM 頭標記,明確指出其物理格式
  4. 在web.config檔案中指明站點編碼,可以在一定程度上避免中文亂碼。

轉自:live.aulddays.com

相關推薦

Asp.net utf-8 編碼中文亂碼完全解決方案

 Unicode 編碼正逐漸成為多語言支援的最通用解決方案。採用 Unicode 編碼的中文網頁能在各種平臺、各種類的瀏覽器上都得到很好的相容。utf-8 是 Unicode 的一種儲存/交換實現方式。對於不同數值範圍的 Unicode 碼,它採用變長的方式來編碼:所有

Visual Studio utf-8 程式碼 中文亂碼完全解決方案

Unicode 編碼正逐漸成為多語言支援的最通用解決方案。採用 Unicode 編碼的中文網頁能在各種平臺、各種類的瀏覽器上都得到很好的相容。utf-8 是 Unicode 的一種儲存/交換實現方式。對於不同數值範圍的 Unicode 碼,它採用變長的方式來編碼:所有 A

qt5.8+MYSQL中文亂碼解決方案

[mysql] # 設定mysql客戶端預設字符集 default-character-set=utf8  [mysqld] #設定3306埠 port = 3306  # 設定mysql的安裝目錄 basedir=C:\MYSQL # 設定mysql資料庫的資料的存放目錄 datadir=C:\MYSQL\

ASPUTF-8編碼的vbscript頁面,除錯資訊的亂碼問題

在被UTF-8編碼的vbscript頁面,在寫程式的過程中,不小心寫錯的話,在頁面的輸出資訊是亂碼的,如下圖所示: 讓人無法得知錯誤的原因。 畢竟在vbscript最初發展的時候,UTF-8編碼還沒有普及,都是預設以伺服器系統的預設編碼來跑網頁,這與現在網頁皆用UTF-8

HTML頁面為什麽設置了UTF-8仍然中文亂碼

計算機 標簽 href 出現 odin set sin editplus title 如題,其實問題很簡單,在用EditPlus寫html頁面的時候,發現設置為UTF-8的時候仍然出現了亂碼,這是一個很奇怪的問題,而且我完全考慮了瀏覽器的解析問題,將title放在了了met

python中遇到包含UTF-8編碼中文的列表或字典的輸出的解決方法

今天,在除錯程式時,遇到了一個編碼問題,折騰了好久,看到了一篇部落格:點選開啟連結 才解決了問題,現在摘錄如下,以免今後遇到同樣的問題再次折騰。 在python 下面一個包含中文字串的列表(lis

html中 Charset=UTF-8還是中文亂碼 解決辦法

utf-8是國際編碼,包括漢字,建議都設定成utf-8,省心; 步主如下: 第一:定義網頁顯示編碼。如果不定義網頁編碼,那麼我們瀏覽網頁的時候,IE會自動識別網頁編碼,這就有可能會導致中文顯示亂碼了。 所以我們做網頁的時候,都會用“<meta http-equiv=”

ASP.net連線mysql資料庫中文亂碼問題的解決方法

1. 修改mysql的配置。到mysql server的安裝目錄下找到my.ini,修改[mysql]小節中的default-character-set為utf8[mysql] default-character-set=utf8 2. 修改mysql server的字符集如

Asp.Net Url 傳值出現亂碼解決方法(包括js傳值)

("中華人明共和國"); http: //你要獲取某個頁面的返回值的地址" //傳送請求 HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(message) ; //接受請求 HttpWebResponse myH

微信公眾號開發--獲取用戶信息中文亂碼解決方案

其中 utf-8 == font zzu 解決 col class api 在微信開發中我們會經常需要獲取用戶的信息。 微信給我們提供了獲取用戶信息的api, 地址為 https://api.weixin.qq.com/cgi-bin/user/info?access_t

JAVA中文亂碼解決方案

can tco con enc 字符 pos 好的 type nco 1.解決HTML頁面的中文問題:為了使HTML頁面很好的支持中文,在每個HTML頁面的<head>標簽內部增加(創建HTML頁面自帶) <head> <m

讓Windows Server 2008 + IIS 7+ ASP.NET 支援10萬併發請求--手動解決方案(轉載)

今天下午17點左右,部落格園部落格站點出現這樣的錯誤資訊: Error Summary: HTTP Error 503.2 - Service Unavailable The [email protected] setting is being exceeded. 

linux 下navicat 中文亂碼終極解決方案

navicat 也是夠了,直接用了個wine包裝navicat 成了linux版本的了,對此表示無語 此前有很多人說,要更改startnavicat指令碼中的 lang 很明確的說沒有成功,因為 根本不是那的事, 是因為wine的事  解決辦法: 安裝 文泉驛字型

Java使用ResourceBundle類讀取properties檔案中文亂碼解決方案

Java使用java.util.ResourceBundle類的方式來讀取properties檔案時不支援中文,要想支援中文必須將檔案設定為ISO-8859-1編碼格式,這對於開發工具預設為UTF-8來說很不友好,而且就算用ISO-8859-1編碼,當其他人將這個專案匯入開發工具時很容易出現這個propert

Springmvc使用阿里巴巴的fastjson傳輸到前臺中文亂碼解決方案,他孃的大家都少製造垃圾,學習過程將會多麼快樂

  弄了大概七八個小時吧 都他媽比的抄來抄去,一分一秒的去試錯 最終參考這個問題解決了亂碼的情況https://bbs.csdn.net/topics/392169549 412 需要在springmvc中新增如下配置(我都使用的utf-8) <!-- stri

Python - Sublime Text 3 控制檯輸出中文亂碼解決方案

工具 -> 編譯系統 -> 新編譯系統 { "cmd": ["python","-u","$file"], "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)", "selector"

C語言---VS2017---輸出中文亂碼問題解決方案

 今天會員【HiroLCS】提到一個問題,就是在VS2017新建的C/C++控制檯程式顯示的中文竟然是亂碼,效果圖如下:            出現亂碼,必然是編碼問題。而編碼問題就要考慮到多方面的因素,大致分為:檔案編碼、程式碼編碼、輸出結果顯示的編碼。我們只要以此來檢查這

ubtuntu環境下使用matplotlib 繪圖中文亂碼終極解決方案

很多童鞋都喜歡在linux環境下寫程式碼,但是Linux環境下經常會出現如下圖中文亂碼的問題,博主最近在linux下寫python程式時就遇到了matplotlib繪圖時總出現中文變成框框的情況。其他的童鞋也給出了不錯的辦法比如修改全域性環境的方法等,博主

asp.net 中 DropDownList 加入可輸入功能解決方案

先把這段JS程式碼放到你頁面的HTML中去 function catch_keydown(sel) { switch(event.keyCode) { case 13: //Enter; sel.options[sel.length] = new Option("",

python爬取網頁中文亂碼解決方案。python3

``` r = requests.get('http://www.xxxxxxxxxxxxxxx.html') print(r.text) ``` 初次試寫python爬蟲爬取網頁小說, 在第一個網站的時候沒問題   第二個網站竟然中文亂碼 很是尷尬 多方求助