下载
加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 C实现UTF-8编码的字符串拆分成单字

C实现UTF-8编码的字符串拆分成单字.doc

C实现UTF-8编码的字符串拆分成单字

孔夫子祥玉
2017-09-26 0人阅读 举报 0 0 暂无简介

简介:本文档为《C实现UTF-8编码的字符串拆分成单字doc》,可适用于职业岗位领域

C实现编码的字符串拆分成单字一、字符编码简介ASCII码在计算机内部所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有和两种状态因此八个二进制位就可以组合出种状态这被称为一个字节(byte)。也就是说一个字节一共可以用来表示种不同的状态每一个状态对应一个符号就是个符号从到。上个世纪年代美国制定了一套字符编码对英语字符与二进制位之间的关系做了统一规定。这被称为ASCII码一直沿用至今。ASCII码一共规定了个字符的编码比如空格“SPACE”是(二进制)大写的字母A是(二进制)。这个符号(包括个不能打印出来的控制符号)只占用了一个字节的后面位最前面的位统一规定为。Unicode英语用个符号编码就够了但是用来表示其他语言个符号是不够的。因此很多欧洲国家发明了很多非ASCII码同样用一个字节用最高位为的区间(既~)来扩展原来的ASCII码其中一种比较有名的就是IBM字符编码。这样一来这些欧洲国家使用的编码体系可以表示最多个符号。但是这里又出现了新的问题。不同的国家有不同的字母因此哪怕它们都使用个符号的编码方式代表的字母却不一样。但是不管怎样所有这些编码方式中表示的符号是一样的不一样的只是的这一段。至于亚洲国家的文字使用的符号就更多了汉字就多达万左右。一个字节只能表示种符号肯定是不够的就必须使用多个字节表达一个符号。比如简体中文常见的编码方式是GB使用两个字节表示一个汉字所以理论上最多可以表示x=个符号。世界上存在着多种编码方式同一个二进制数字可以被解释成不同的符号。因此要想打开一个文本文件就必须知道它的编码方式否则用错误的编码方式解读就会出现乱码。为什么电子邮件常常出现乱码,就是因为发信人和收信人使用的编码方式不一样。可以想象如果有一种编码将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码那么乱码问题就会消失。这就是Unicode就像它的名字都表示的这是一种所有符号的编码。Unicode当然是一个很大的集合现在的规模可以容纳多万个符号。每个符号的编码都不一样。需要注意的是Unicode只是一个符号集它只规定了符号的二进制代码却没有规定这个二进制代码应该如何存储。互联网的普及强烈要求出现一种统一的编码方式。就是在互联网上使用最广的一种unicode的实现方式。其他实现方式还包括和不过在互联网上基本不用。重复一遍这里的关系是是Unicode的实现方式之一。最大的一个特点就是它是一种变长的编码方式。它可以使用~个字节表示一个符号根据不同的符号而变化字节长度。的编码规则很简单只有二条:)对于单字节的符号字节的第一位设为后面位为这个符号的unicode码。因此对于英语字母编码和ASCII码是相同的。)对于n字节的符号(n>)第一个字节的前n位都设为第n位设为后面字节的前两位一律设为。剩下的没有提及的二进制位全部为这个符号的unicode码。如表:字节xxxxxxx字节xxxxxxxxxxx字节xxxxxxxxxxxxxxxx字节xxxxxxxxxxxxxxxxxxxxx字节xxxxxxxxxxxxxxxxxxxxxxxxxx字节xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx因此中可以用来表示字符编码的实际位数最多有位即上表中x所表示的位。除去那些控制位(每字节开头的等)这些x表示的位与UNICODE编码是一一对应的位高低顺序也相同。实际将UNICODE转换为编码时应先去除高位然后根据所剩编码的位数决定所需最小的编码位数。因此那些基本ASCII字符集中的字符(UNICOD‎‎E兼容ASCII)只需要一个字节的编码(个二进制位)便可以表示。根据此规则可以很方便的把编码的字符串拆分成单字集合代码如下:,sizettocharset(conststd::stringinput,std::set<std::string>output){,std::stringch,for(sizeti=,len=i!=inputlength()i=len){,unsignedcharbyte=(unsigned)inputi,if(byte>=xFC)lenght,len=,elseif(byte>=xF),len=?elseif(byte>=xF),,len=,,elseif(byte>=xE),,len=,,elseif(byte>=xC),,len=,,else,,len=,,ch=inputsubstr(i,len),,outputinsert(ch),?},,returnoutputsize(),,}这里我把字符串转换为单字的集合(set)是因为应用场景的需要如果需要保持单字在字符串中的位置可以很方便的用vector来替换set。

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/4

C实现UTF-8编码的字符串拆分成单字

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利