第一种方法: /// <summary> /// 获取字符串中英文字符的长度,一个中文占2个字符长度 /// </summary> /// <param name="strWithEnglishAndChinese">字符串</param> /// <returns></returns> public static int GetEnAndCnLength(string strWithEnglishAndChinese) { int lng = 0; Regex reg = new Regex("[\u4E00-\u9FA5]"); char[] chrs = strWithEnglishAndChinese.ToCharArray(); foreach (char c in chrs) { if (reg.IsMatch(c.ToString())) { lng += 2; } else { lng += 1; } } return lng; } 第二种方法: /// <summary> /// 获取中英文混合字符串的文字长度(1个英文占1个长度,1个汉字占2个长度) /// </summary> /// <param name="stringWithEnglishAndChinese">中英文混合的字符串</param> /// <returns>字符串长度(1个英文占1个长度,1个汉字占2个长度)</returns> public static int GetEnglishLength(string stringWithEnglishAndChinese) { int lng = 0; for (int i = 0; i < stringWithEnglishAndChinese.Length; i++) { byte[] b = System.Text.Encoding.Default.GetBytes(stringWithEnglishAndChinese.Substring(i, 1)); if (b.Length > 1) lng += 2; else lng += 1; } return lng; }
说明:方法二没有什么说的,完全正确的。方法一中,如果有中文标点符号的话,会出错,统计的字符数量不正确。
摘自:http://hi.baidu.com/lost2happy/item/e1b6a75bfa52570fe6c4a591