中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > 综合其它
谈谈汉字的内码
作者:未知 时间:2005-09-13 23:34 出处:Blog.ChinaUnix.net 责编:chinaitpower
              摘要:谈谈汉字的内码
我在UNIX平台编写程序的时候,经常遇到字符终端显示汉字出现乱码的情况,例如,我在字符终端显示长篇汉字的摘要(长篇汉字的头部分汉字)时,通过strncpy函数复制一些字符时由于存在英文字符的原因,就出现了目标字符串的乱码。当然界面显示的时候就会出现乱七八糟的情况。

      其实,解决这些问题很简单,这需要了解汉字的编码情况。 
  计算机上使用的汉字有两类代码,一类叫外码,用来输入汉字,如拼音码、郑码、五笔字型码等。由于人们不断寻求更佳的汉字输入法,因此外码也就层出不穷。不同的外码规则也不同,如果计算机内部存储汉字时,也采用这些五花八门的编码,势必使汉字系统过于复杂。因此,不论用什么输入法输入的汉字,在存入存储器时,都将它的外码转换成一种统一的代码,这就是汉字内码。
  一个汉字的内码由两个字节组成。汉字内码与区位码之间有一个简单的关系:
      内码第一字节=区码+160
      内码第二字节=位码+160
  比如,查区位码表知道,“啊”字在16区01位,它的内码为:
  第一字节=16+160=176
  第二字节=1+160=161
  英文字符的代码ASCII只用一个字节表示。为什么一个汉字要用两个字节来表示呢?原来一个字节(8位二进制数)能表示的最大整数范围是0~255,也就是说最多能表示256种不同的状态,这用于表示几十个英文字符足够了。但是汉字有成千上万个,所以至少要用两个字节(16位二进制数)来编码。两个字节最多可有65536种不同的编码。
  由于大多英文软件只处理单字节对象,而汉字内码又是双字节的,这就会带来一些问题。比如我们用vi编辑一个文本文件,要删掉其中的一个汉字时,要敲两次删除键才能删掉。若是只删了一下,后面的汉字就变得面目全非了。道理很简单:删一下,只删掉了汉字内码的一个字节,剩下的一个字节和下一个汉字的头一个节就构成了另一个汉字或符号的内码,于是就显示出和这个内码对应的汉字或符号。依次错位,后面的汉字就全变了。
  因此,我对strncpy进行了改造,编写了一个支持汉字的情况的函数,前提要求是传入的字符序列不出现乱码情况,否则,我也没有办法了。

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有