求中英文混合字符串长度,中英文混合字符串截取(汉字2个字节,字母数字等1个字节),字符转ASCII码

/// <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码的转换参考:

http://blog.csdn.net/ldw701/archive/2006/06/01/767875.aspx

 



你可能感兴趣的:(求中英文混合字符串长度,中英文混合字符串截取(汉字2个字节,字母数字等1个字节),字符转ASCII码)