热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

深入解读代码页与字符集的概念及其实际应用

许多开发者可能未曾留意到这一问题,但如果您的网站频繁遭遇不明原因的乱码现象,深入了解代码页与字符集的概念及其实际应用将大有裨益。代码页(Codepage),即内码表,是计算机系统中用于映射字符与其编码值的一种机制,不同的代码页支持不同的字符集,正确选择和配置代码页对于确保文本数据的准确显示至关重要。在多语言环境下,合理运用字符集和代码页能够有效避免字符编码冲突,提升用户体验。

很多朋友可能没有意识到这个问题,但如果你的网站经常出现莫名其妙的乱码,那么就应该好好地来看看这个话题。

codepage,中文翻译为 “内码表”或者“代码页”,它的完整介绍可以参考下面的链接

http://zh.wikipedia.org/wiki/%E4%BB%A3%E7%A0%81%E9%A1%B5

简单地说,这是程序用于对字符进行编码的一个表。代码页是服务器的事情,或者说是程序的事情。与客户端没有关系。

常见的三种codepage我们是必须知道的

  • 简体中文 : 936
  • 繁体中文 : 950
  • UTF-8 : 65001

我们以前写ASP程序的时候,通常都需要明确指定codepage的,大致下面这样的语法

<%&#64; codepage&#61;936%>简体中文
<%&#64; codepage&#61;950%>繁体中文
<%&#64; codepage&#61;65001%>UTF-8

这样实际上是指定当前页面的字符按照特定的代码页进行编码

这些代码对于有些比较年轻的朋友来说&#xff0c;可能根本没有接触过。毕竟&#xff0c;在ASP.NET里面&#xff0c;你一般不需要进行设置。

<%&#64; Page Language&#61;"C#" AutoEventWireup&#61;"true" CodeBehind&#61;"Default.aspx.cs" Inherits&#61;"WebApplication1._Default"%>



   


   
   


   

   

这是一个简单的页面&#xff0c;我们在其中并没有看到有关代码页的设置。那么&#xff0c;如果没有做设置&#xff0c;会用什么设置呢&#xff1f;

答案是&#xff1a;ASP.NET将默认使用UTF -8 进行编码。这也是为什么现在的网页很少发生乱码的原因。

怎么看这个默认的代码页设置呢&#xff1f;很简单&#xff0c;我们通过下面的代码就可以看到

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication1
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
                Response.Write("当前的代码页设置为:"&#43;Session.CodePage.ToString());
        }
    }
}
image

大家可以看到&#xff0c;默认的codepage是65001

 

与此同时&#xff0c;如果你不想用默认的UTF-8&#xff08;我认为基本上这是不可能的&#xff09;&#xff0c;你仍然可以修改该设置

  • 直接在页面中修改
    • <%&#64; Page Language&#61;"C#" AutoEventWireup&#61;"true" CodeBehind&#61;"Default.aspx.cs" Inherits&#61;"WebApplication1._Default" CodePage&#61;"936"%>
  • 在代码中修改
    • Session.CodePage &#61; 936;//这句代码修改代码页为简体中文

我们可以来测试一下为什么会发生乱码。假设&#xff0c;我们强制给代码页设置为950&#xff08;也就是繁体中文&#xff09;&#xff0c;但是在response里面&#xff0c;我们又输出了简体中文字。那么该页面看起来就像下面这样

image

传说中的乱码&#xff0c;对吧&#xff1f;

好了&#xff0c;我们大致介绍了codepage的概念&#xff1a;简单地说&#xff0c;它是程序对字符进行编码的依据。

那么&#xff0c;什么是charset呢&#xff1f;

charset&#xff0c;中文翻译为“字符集”&#xff0c;这是指浏览器对收到的字符进行解码所用的字符表。浏览器一般都会自动地根据response中的元数据&#xff0c;选择相应的字符集。如果浏览器的字符集与服务器指定的代码页不匹配&#xff0c;那么很自然可能又产生乱码。

怎么看response中的charset信息&#xff1f;

image

怎么调整浏览器的字符器设置呢&#xff1f;虽然一般都是自动的&#xff0c;但仍然可以更改

image

所以&#xff0c;我们到这里就明白了&#xff0c;codepage是服务器端的&#xff0c;charset是浏览器端的。两者必须匹配&#xff0c;才能避免乱码问题。

本文由作者&#xff1a;陈希章 于 2009/6/23 11:20:26 发布在&#xff1a;http://www.cnblogs.com/chenxizhang/
本文版权归作者所有&#xff0c;可以转载&#xff0c;但未经作者同意必须保留此段声明&#xff0c;且在文章页面明显位置给出原文连接&#xff0c;否则保留追究法律责任的权利。
更多博客文章&#xff0c;以及作者对于博客引用方面的完整声明以及合作方面的政策&#xff0c;请参考以下站点&#xff1a;陈希章的博客中心


推荐阅读
  • 如何构建基于Spring MVC框架的Java Web应用项目
    在构建基于Spring MVC框架的Java Web应用项目时,首先应创建一个新的动态Web项目。接着,需将必要的JAR包导入至WebContent/WEB-INF/lib目录下,确保包括Spring核心库及相关依赖。如遇缺失的JAR包,可向社区求助或通过Maven等工具自动下载。正确配置后,即可开始搭建应用结构与功能模块。 ... [详细]
  • 深入解析Wget CVE-2016-4971漏洞的利用方法与安全防范措施
    ### 摘要Wget 是一个广泛使用的命令行工具,用于从 Web 服务器下载文件。CVE-2016-4971 漏洞涉及 Wget 在处理特定 HTTP 响应头时的缺陷,可能导致远程代码执行。本文详细分析了该漏洞的成因、利用方法以及相应的安全防范措施,包括更新 Wget 版本、配置防火墙规则和使用安全的 HTTP 头。通过这些措施,可以有效防止潜在的安全威胁。 ... [详细]
  • 深入解析 Spring MVC 的核心原理与应用实践
    本文将详细探讨Spring MVC的核心原理及其实际应用,首先从配置web.xml文件入手,解析其在初始化过程中的关键作用,接着深入分析请求处理流程,包括控制器、视图解析器等组件的工作机制,并结合具体案例,展示如何高效利用Spring MVC进行开发,为读者提供全面的技术指导。 ... [详细]
  • 如何在Java中高效构建WebService
    本文介绍了如何利用XFire框架在Java中高效构建WebService。XFire是一个轻量级、高性能的Java SOAP框架,能够简化WebService的开发流程。通过结合MyEclipse集成开发环境,开发者可以更便捷地进行项目配置和代码编写,从而提高开发效率。此外,文章还详细探讨了XFire的关键特性和最佳实践,为读者提供了实用的参考。 ... [详细]
  • 成功实现Asp.Net MVC3网站与MongoDB数据库的高效集成
    我们成功地构建了一个基于Asp.NET MVC3框架的网站,并实现了与MongoDB数据库的高效集成。此次更新不仅完善了基本的创建和显示功能,还全面实现了数据的增删改查操作。在创建功能方面,我们修复了之前代码中的错误,确保每个属性都能正确生成。此外,我们还对数据模型进行了优化,以提高系统的性能和稳定性。 ... [详细]
  • JVM参数设置与命令行工具详解
    JVM参数配置与命令行工具的深入解析旨在优化系统性能,通过合理设置JVM参数,确保在高吞吐量的前提下,有效减少垃圾回收(GC)的频率,进而降低系统停顿时间,提升服务的稳定性和响应速度。此外,本文还将详细介绍常用的JVM命令行工具,帮助开发者更好地监控和调优JVM运行状态。 ... [详细]
  • Django框架下的对象关系映射(ORM)详解
    在Django框架中,对象关系映射(ORM)技术是解决面向对象编程与关系型数据库之间不兼容问题的关键工具。通过将数据库表结构映射到Python类,ORM使得开发者能够以面向对象的方式操作数据库,从而简化了数据访问和管理的复杂性。这种技术不仅提高了代码的可读性和可维护性,还增强了应用程序的灵活性和扩展性。 ... [详细]
  • SQLmap自动化注入工具命令详解(第28-29天 实战演练)
    SQL注入工具如SQLMap等在网络安全测试中广泛应用。SQLMap是一款开源的自动化SQL注入工具,支持12种不同的数据库,具体支持的数据库类型可在其插件目录中查看。作为当前最强大的注入工具之一,SQLMap在实际应用中具有极高的效率和准确性。 ... [详细]
  • 探索JavaScript倒计时功能的三种高效实现方法及代码示例 ... [详细]
  • 本文将介绍一种扩展的ASP.NET MVC三层架构框架,并通过使用StructureMap实现依赖注入,以降低代码间的耦合度。该方法不仅能够提高代码的可维护性和可测试性,还能增强系统的灵活性和扩展性。通过具体实践案例,详细阐述了如何在实际开发中有效应用这一技术。 ... [详细]
  • 本文提供了 RabbitMQ 3.7 的快速上手指南,详细介绍了环境搭建、生产者和消费者的配置与使用。通过官方教程的指引,读者可以轻松完成初步测试和实践,快速掌握 RabbitMQ 的核心功能和基本操作。 ... [详细]
  • 浏览器中 W3School JavaScript 的 Location 对象详解
    Location对象是浏览器Window对象的一部分,通过`window.location`属性可访问。它包含了当前页面URL的相关信息,如协议、主机名、路径和查询参数等,对于页面导航和URL操作非常有用。 ... [详细]
  • 全新发布的自我修复与自我更新的Linux版本,专为云计算环境设计! ... [详细]
  • PHP连接MySQL的三种方法及预处理语句防止SQL注入的技术详解
    PHP连接MySQL的三种方法及预处理语句防止SQL注入的技术详解 ... [详细]
  • 使用Boost.Asio进行异步数据处理的应用程序主要依赖于两个核心概念:I/O服务和I/O对象。I/O服务抽象了操作系统接口,使得异步操作能够高效地执行。I/O对象则代表了具体的网络资源,如套接字和文件描述符,通过这些对象可以实现数据的读写操作。本文详细介绍了这两个概念在Boost.Asio中的应用及其在网络编程中的重要性。 ... [详细]
author-avatar
hazouri林_978
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有