对字符串操作的一些研究

        首先,在CLR中所有的字符都被表示为16位的Unicode码值,所有的字符串都是由16位的Unicode码值组成。

        16位的Unicode编码可以表示当今世界上的所有字符,所以,不必为字符的不同而担心保存的方式,这给字符的转换会很方便。

        但是字符串保存在CLR中,如果我们需要呈现出来,比如写入文本文件,写入网络流,如果按照这样的方式,可能会很浪费空间,比如是英文字符就不需要这么宽的长度来保存,并且对于特定的字符集,比如中文字符集,这些是需要特定的代码页来编码的,如GB2312等等。

编码方式主要有:

             UTF-16:一个16为字符编码为两个字节,性能最好,但是占用空间较大。

             UTF-8:按需分配字节数。

            ASCII:单字节编码,只适用于英文字符。

        UTF-8:当今世上最流行的编码方式,它可以按照码值灵活安排字节数,也就是存储空间。所以我们在应用的时候应该尽量使用UTF-8UTF-16这样的编码方法来进行字符串的编码。因为这样很安全,不会出现不认识的字符。 UTF1616位字符编码为2个字节,而UTF8则有四种可能,比如英文字符他会编码为一个字节,一些欧洲和中东语言,它会编码为两个字节,一些东亚地区的语言它会编码成三个字节,代理字符会被转换为4个字节。

        当然.NET还允许把字符编码到指定的代码页中,比如GB2312。但是一旦出现指定代码页中没有的字符,将不能正确呈现。

见下面代码:

Encoding


 


测试的结果为:



        可以看出,对应的字节一定要对应的解码才能正确体现出来,用
GB2312对中英文混和的字符串最节省空间,UTF8也是比较节约的,只是一个汉字占用了三个字节,UTF16可能对中英文混和的字符编码效率最好,但是占用空间也最多,这样看来各有千秋,要根据我们的应用场合来决定编码了。

posted on 2005-09-30 11:39  dragonpro  阅读(1956)  评论(9编辑  收藏  举报

Free Web Counter