/// <summary> /// 求字符串的实际长度(汉字2个字节,外语字符1个字节) /// </summary> /// <param name="str"></param> /// <returns></returns> public static int Length(string str) { int len = 0; char[] arr = str.ToCharArray(); for (int i = 0; i < arr.Length; i++) { //汉字 if (Asc(arr[i].ToString()) == -1) len += 2; else len += 1; } return len; } /// <summary> /// 重写截取字符串方法,这里的长度是字节数(汉字2个字节,外语字符1个字节) /// </summary> /// <param name="str"></param> /// <param name="length">截取长度(这里的长度是字节数,汉字2个字节,外语字符1个字节)</param> /// <returns></returns> public string Substring(string str, int length) { int len = 0; char[] arr = str.ToCharArray(); string strReturn = string.Empty; //参数检查 if (length > Length(str)) length = Length(str); for (int i = 0; i < arr.Length; i++) { //汉字 if (Asc(arr[i].ToString()) == -1) len += 2; else len += 1; if (len > length) break; strReturn += arr[i].ToString(); } return strReturn; } /// <summary> /// 字符转ASCII码,如果未能转换为ASCII码返回-1 /// </summary> /// <param name="character"></param> /// <returns></returns> public static int Asc(string character) { if (character.Length == 1) { //因为汉字和?都被转换为63,所以?进行提前处理 if (character == "?") return 63; System.Text.ASCIIEncoding asciiEncoding = new System.Text.ASCIIEncoding(); int intAsciiCode = (int)asciiEncoding.GetBytes(character)[0]; //如果未能转换为ASCII码(暂且认为为汉字) if (intAsciiCode == 63) return -1; return (intAsciiCode); } else { throw new Exception("Character is not valid."); } } /// <summary> /// ASCII码转字符 /// </summary> /// <param name="asciiCode"></param> /// <returns></returns> public static string Chr(int asciiCode) { if (asciiCode >= 0 && asciiCode <= 255) { System.Text.ASCIIEncoding asciiEncoding = new System.Text.ASCIIEncoding(); byte[] byteArray = new byte[] { (byte)asciiCode }; string strCharacter = asciiEncoding.GetString(byteArray); return (strCharacter); } else { throw new Exception("ASCII Code is not valid."); } }
关于ASCII码的转换参考: