首页 理论教育 C++STL精解:宽字符和多字节文本处理

C++STL精解:宽字符和多字节文本处理

时间:2023-10-25 理论教育 版权反馈
【摘要】:面对多于256个字符的字符集,有两种不同的解决方案;多字节表示法和宽字符表示法。1)多字节表示法。2)宽字符表示法。字符所用的字节数目是恒定的,与所表示的字符无关。与ISO C相似,ISO C++使用wchar_t表示宽字符。例如对于GB汉字的表示,1个字符仅表示半个汉字字符。尤其在遍历多字节字符串时,每个字节的意义均由当时的“转换”状态决定。例如,在初始转换状态下,可能每个字节均代表ISO拉丁字符,直到遭遇“Escape”字符为止。

C++STL精解:宽字符和多字节文本处理

面对多于256个字符的字符集,有两种不同的解决方案;多字节表示法和宽字符表示法。

1)多字节表示法。字符所用的字节(Byte)个数是可变的。单个字节字符后面可以跟随3Byte,例日本表意文字或中国的象形文字

2)宽字符表示法。字符所用的字节数目是恒定的,与所表示的字符无关。典型的个数是2或4Byte。其实,这和那些只使用1Byte的表示法没有区别。

多字节表示法比宽字节表示法更紧凑,前者通常用于在程序外部储存数据,后者由于比较容易处理固定大小的字符,通常程序内部被使用。(www.xing528.com)

与ISO C相似,ISO C++使用wchar_t表示宽字符。并且,在C++中,wchar_t被确定为关键词,而不仅仅是一个型别定义,而且可以使用该型别对所有函数进行重载。

在多字节字符串中,当某单个字节代表一个字符时,它也有可能是字符的一部分。例如对于GB汉字的表示,1个字符仅表示半个汉字字符。尤其在遍历多字节字符串时,每个字节的意义均由当时的“转换”状态决定。根据转换状态,一个字节仅表示一个字符。通常多字节字符串会具有某些预定的初始转换状态。例如,在初始转换状态下,可能每个字节均代表ISO拉丁字符,直到遭遇“Escape”字符为止。紧跟在“Escape”字符之后的字符会用于指示新的转换状态,这意味着随后的字节会被理解为阿拉伯字符,直到遇到下一个“Escape”字符为止。

类模板codecvt< >用于在多种字符编码方案之间转换。该类主要为模板类basic_filebuf< >提供服务。在数据内部表述和外部表述时,实现转换。C++标准没有对多字节字符编码做任何的假定,仅仅支持“转换状态”的概念。类模板codecvt< >的成员可以运用一个参数来储存字符串的任意状态。类模板codecvt< >还支持把某个字符序列将转换状态还原为初始状态。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈