热门标签 | 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;陈希章的博客中心


推荐阅读
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 作为一名新手,您可能会在初次尝试使用Eclipse进行Struts开发时遇到一些挑战。本文将为您提供详细的指导和解决方案,帮助您克服常见的配置和操作难题。 ... [详细]
  • 本文详细介绍如何使用Samba软件配置CIFS文件共享服务,涵盖安装、配置、权限管理及多用户挂载等关键步骤。通过具体示例和命令行操作,帮助读者快速搭建并优化Samba服务器。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • Scala 实现 UTF-8 编码属性文件读取与克隆
    本文介绍如何使用 Scala 以 UTF-8 编码方式读取属性文件,并实现属性文件的克隆功能。通过这种方式,可以确保配置文件在多线程环境下的一致性和高效性。 ... [详细]
  • ASP.NET MVC中Area机制的实现与优化
    本文探讨了在ASP.NET MVC框架中,如何通过Area机制有效地组织和管理大规模应用程序的不同功能模块。通过合理的文件夹结构和命名规则,开发人员可以更高效地管理和扩展项目。 ... [详细]
  • 本文探讨了 Spring Boot 应用程序在不同配置下支持的最大并发连接数,重点分析了内置服务器(如 Tomcat、Jetty 和 Undertow)的默认设置及其对性能的影响。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 深入解析 Spring Security 用户认证机制
    本文将详细介绍 Spring Security 中用户登录认证的核心流程,重点分析 AbstractAuthenticationProcessingFilter 和 AuthenticationManager 的工作原理。通过理解这些组件的实现,读者可以更好地掌握 Spring Security 的认证机制。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • 解决网站乱码问题的综合指南
    本文总结了导致网站乱码的常见原因,并提供了详细的解决方案,包括文件编码、HTML元标签设置、服务器响应头配置、数据库字符集调整以及PHP与MySQL交互时的编码处理。 ... [详细]
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社区 版权所有