日期:2014-05-18  浏览次数:20942 次

需要按GB(每汉字两字符,数字等一字符)的一定长度来截取字符串
需要按GB(每汉字两字符,数字等一字符)的一定长度来截取字符串
可是C#是按每汉字一字符计算的啊,头痛。
用到的字符串经常是汉字、数字、英文字母混合的。
比如:a中d12文cd,要取6位字符长,用Substring(0,6)取的长度字符不合要求。
怎么办?

------解决方案--------------------
C# code
Text = Encoding.Default.GetString(
    Encoding.Default.GetBytes("a中d12文cd"), 0, 6); //a中d12

------解决方案--------------------
C# code
    // 把一个“unicode字符串”格式化为全角字符占2个位置的“普通字符串”
    // width<0 表示左对齐,右边填空格
    // width>0 表示右对齐,左边填空格
    public static string StrFormat(string s, int width)
    {
      Encoding code = Encoding.Default;
      byte [] bs = code.GetBytes(s);
      bool leftAlign = (width < 0 ? true : false);
      if (width < 0) width = - width;
      if (bs.Length >= width) return s;
      if (leftAlign) return s.PadRight(width-bs.Length+s.Length);
      return s.PadLeft(width-bs.Length+s.Length);
    }