Visual Studio 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" %><!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.mingliang.org</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 方式保存并可以正常浏览了。下面为该网页编写按钮相应代码:



 

运行网页,点击 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文件中指明站点编码,可以在一定程度上避免中文乱码
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在使用Visual Studio过程中出现中文乱码的情况有几种可能的原因。首先,如果项目中导入了其他已经创建好的源代码文件,而这些文件的编码不是GB2312,且含有中文字符,那么就会导致中文乱码。其次,从其他文件中复制代码Visual Studio的文件中也可能导致编码错乱。最后,在网络编程中,和服务器交互通信时,两端的编码很可能不同,也会导致中文乱码。 解决中文乱码问题的方法有几种。首先,可以保持控制台编码和源代码编码一致,即修改Visual Studio的调试控制台编码为与系统控制台编码相同的代码页。这可以通过在注册表编辑器中修改CodePage的十进制数值实现。另外,可以使用#pragma execution_character_set("UTF-8")代码来指定程序执行时使用的编码和调试窗口编码一致,从而解决乱码问题。然而,修改控制台默认编码可能导致输入的中文无法识别,因此不建议使用这种方式。 总结起来,解决Visual Studio中文乱码问题的方法包括保持控制台编码和源代码编码一致以及使用指定编码的代码,但需注意不要修改控制台默认编码以避免产生其他问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [visual studio控制台中文乱码问题](https://blog.csdn.net/xuan3215/article/details/128557157)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Visual Studio里常见中文乱码问题的解决方案](https://blog.csdn.net/DYDlove/article/details/104590763)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值