前两天写了个.NET截取中英文混合字符串的小程序,详见http://blog.youkuaiyun.com/CityBird/archive/2011/04/11/6316846.aspx,Print出来的结果也都正常,本以为没什么问题了,但是实际在使用过程中却出了大麻烦,主要是截取的位置正好在中文字符的中间部位时,由于截取结果的最后一个字节是半个汉字,虽然Print出来的时候看不到,但是如果写到文件里面,就会发现后面多出点乱码,拿System.Text.Encoding.Default.GetBytes再次把截取以后的字符串转成Byte数组,结果发现截取内容以外的部分依然存在着,只是将截取的部位的下一个字符用字符串终止符替换了一下而已。由此可见System.Text.Encoding.Default.GetString的实现方法实际就是一个字符替换操作,原字符串申请的存储空间什么的全都没有释放。其实存储空间释放不释放的跟我其实没啥关系,反正取值的时候只是返回终止符前面的内容,只要别再用System.Text.Encoding.Default.GetBytes去取截取后的字符串字节长度就行了,现在的关键问题是后面多出的那点尾巴怎么处理呢,唉,头疼,想了很多办法都不行,没办法最后还是老老实实的用最土的办法来做吧,拿System.Text.Encoding.Default.GetBytes把原始字符串转成数组,然后判断最后一个字节是不是半个汉字,如果是半个汉字用System.Text.Encoding.Default.GetString截取的时候就少截取一个字节的内容好了。具体代码如下:
--------------------------------------------------------------------------------------------------
PS:本文档为本人原创,如需转载请注明作者及出处。谢谢!