日期:2014-05-17  浏览次数:20731 次

很基础但是没解决的问题:indexof

string sMsg = "1苹果2aa";
int iIndex = sMsg.IndexOf("aa");


这样输出的结果是4 (把汉字当作了一个字符处理)
但是,我现在必须想办法获得aa的下标,而且必须视汉字为2字符
也就是说,我希望得到的结果是6
各位,该怎么处理才能让IndexOf把汉字视作2字符呢?
或者有没有别的方法?

------解决方案--------------------
引用:

string sMsg = "1苹果2aa";
int iIndex = sMsg.IndexOf("aa");


这样输出的结果是4 (把汉字当作了一个字符处理)
但是,我现在必须想办法获得aa的下标,而且必须视汉字为2字符
也就是说,我希望得到的结果是6
各位,该怎么处理才能让IndexOf把汉字视作2字符呢?
或者有没有别的方法?

你可以看代码
string sMsg = "1苹果2aa";
int iIndex = sMsg.IndexOf("aa");
var test1 = Encoding.Unicode.GetBytes(sMsg.Substring(0, iIndex)).Length;
var test2 = Encoding.GetEncoding("gb2312").GetBytes(sMsg.Substring(0, iIndex)).Length;
var test3 = Encoding.GetEncoding("gbk").GetBytes(sMsg.Substring(0, iIndex)).Length;

这里计算了三种编码方案下所占用的字节数。

要注意,在.net平台上是默认使用unicode编码的。也就是说“1苹果2aa”这几个字总共占用8个字节,而不是6个字节。(有个帖子里边说)如果你认为.net是用什么 Encoding.Default 编码的,那么就完全错了;如果你认为.net平台里默认都是gbk编码的,也是不正确的。