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" %>

<!DOCTYPE html 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>
    <form id="form1" runat="server">
        <asp:RadioButtonList ID="RadioButtonList1" runat="server">
            <asp:ListItem>旧日重来</asp:ListItem>
            <asp:ListItem>http://live.aulddays.com</asp:ListItem>
        </asp:RadioButtonList>
        <asp:Button ID="Button1" runat="server" Text="Submit"
        OnClick="Button1_Click" />
        <br />
        <asp:Label ID="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 里默认不检测 utf-8 编码,仍然按照 GB2312 的方式来解释这个文件。解决的方法有两个。一是在 VS 的 tools -> Options 菜单里打开 utf-8 强制检查:

二是为网页源代码加上 BOM (Byte-Order Mark) 标记,作为 Unicode 编码方式的签名(推荐使用,因为这样可以保证在任何时候都能正确的检测文件编码)。用 Ultraedit 打开刚才的 aspx 文件,点击 File -> Save as,在保存对话框中 Format 下拉框里选择 UTF-8,以原始文件名覆盖保存即可。此时,在16进制编辑模式下查看可以看到文件已经被加上了3个字节的 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 编码中文乱码完全解决方案相关推荐

  1. python3.x+requests 爬取网站遇到中文乱码的解决方案

    正常情况下,遇见问题上google找答案能甩百度100条街,但是这个问题是个例外······人家老外就没有乱码的问题.言归正传,首先建议大家看一下python3.x+requests 爬取网站遇到中文 ...

  2. sublime java文件乱码问题_Sublime Text 打开Java文档中文乱码的解决方案

    问题: 打开文档后出现中文乱码如图 1.在安装插件之前,首先要安装package control这个组件,才能够给sublime text安装各种插件 打开sublime text,按 ctrl+` ...

  3. [HttpClient]HTTPClient PostMethod 中文乱码问题解决方案(2种)

     HTTPClient PostMethod 中文乱码问题解决方案(2种) Apache HttpClient ( http://jakarta.apache.org/commons/httpcl ...

  4. 【QT5.3】VS2013+QT5.3 中文乱码问题 解决方案

    VS2013+QT5.3 中文乱码问题 解决方案 网上很多关于QT中文乱码的问题及答案,但情况不同解决方法也不一样. 本方案适用于VS2013+QT5.3环境(编译器是VC) using namesp ...

  5. HTML网页中文乱码问题解决方案

    文章目录 HTML代码编写的网页出现中文乱码问题解决方案 1.乱码原因 2.解决方案 webstorm报错Unescaped xml character解决方案1 HTML代码编写的网页出现中文乱码问 ...

  6. java menuitem 图标_MenuItem 显示中文乱码问题解决方案

    MenuItem 显示中文乱码问题解决方案 今天在使用Java做系统托盘图标(TrayIcon),需要为其增加一个右键弹出菜单(PopupMenu),在使用菜单项(MenuItem)时,遇到了一个非常 ...

  7. jsp include中文乱码问题解决方案

    <jsp:include page="footer.jsp" flush="true" /> 问题描述:引入footer.jsp  引入的jsp中文 ...

  8. 使用Kettle抽取数据时,出现中文乱码问题解决方案

    使用Kettle抽取数据时,出现中文乱码问题解决方案 参考文章: (1)使用Kettle抽取数据时,出现中文乱码问题解决方案 (2)https://www.cnblogs.com/yiyezhiqiu ...

  9. 安装mysql中文步骤_MySql安装步骤图文教程及中文乱码的解决方案

    mysql server安装步骤如下所示: 1安装mysql server 2 安装mysqlserver管理工具 解压中文语言包,将文件复制到安装目录下覆盖 文件覆盖后,打开软件设置语言为中文(cn ...

最新文章

  1. 使用idea创建springboot项目并打成war包发布到weblogic上...
  2. 关于JAVA的参数列表传值的问题
  3. Scala的类和对象
  4. 北斗导航 | Matlab实现电离层延迟计算:Klobuchar(源代码)
  5. 0129互联网新闻 | 平安好医生无人诊所进驻高速公路服务区; 第五批游戏版号下发...
  6. WSDM 2020 | RMRN:社区问答中的深度关联推理模型
  7. 打开高效文本编辑之门_Linux sed之多行命令与循环命令
  8. Python解决print()不换行问题
  9. 【BZOJ1014】【tyvj3486】火星人prefix,Splay+字符串hash
  10. 云计算机的优点,介绍云的优点和注意事项
  11. Android5.0以下 源码分析Notification的notify
  12. UIView 移除子视图
  13. Mex HDU - 4747(递推, 思维)
  14. 【opencv学习之十二】opencv滑条及实例
  15. 我的老公-追忆似水流年
  16. Jenkins的制品管理
  17. 为什么内存为什么是以字节为单位的?
  18. Linux 开机自启动
  19. python实现在图片上画框并标注
  20. Activity是什么

热门文章

  1. 学习记录_美术部分_美术理论基础
  2. 弘辽科技:淘宝提升展现词好吗?淘宝展现词如何提升?
  3. 时间不够用?柳比歇夫时间管理法帮到你
  4. 内卷失败:敲了 10000 小时代码,我也没能成为一名高级程序员
  5. 关于centOS无法识别1920*1080分辨率的解决方法
  6. The longest zig-zag subsequence
  7. 十字军之王3等待服务器响应,王国风云3作弊码有什么 十字军之王3控制台代码分享_游侠网...
  8. 安卓使用usb连接外设
  9. 哈夫曼树【北邮机试】
  10. ipad与macbook设置随行(ipad做笔记本副屏)