正在搞一个生成静态新闻页面的程序,里面生成的信息很乱(包括全角字符,汉字,数字,字母等),生成以后长短不一,(我在网上找了些截取字符串的方法,显示都效果不好,问题是双字节汉字的长度不完全等于两个字母的长度).1.现在想求个可以计算每个字符在屏幕上的宽度的方法;
2.或者提供每种不同字体宽度的资料也可(如:Arial类12号字体宽度,包括汉字,数字,字母等不同字体占屏幕的宽度)注意,我作的是web方面的程序,g.MeasureString(new Font)这样的方法是行不通的.
各位支招,100分!!!

解决方案 »

  1.   

    用css啊,字符大小和字间距都能调啊
      

  2.   

    milozy1983(Detective) 
    说明下,我做的是生成静态页面的程序,用的是套模板的方法,一下子生成n个页面,每个页面n条信息.字符大小和字间距在每个生成页面都是一样的,不同的是信息的长度不一,采用截取字符的方式后长度还是长短不一.
      

  3.   

    另外相关的思路,可以参考我在另外一个贴子上的回复:   http://community.csdn.net/Expert/topic/5386/5386866.xml?temp=.0854761
      

  4.   

    原因我上面说了,全角字符,汉字,数字,字母这些在屏幕上所占宽度是不一致的,我生成的效果如下:
    .测试测试...
    .ss测试s...
    我的问题想精准的求出每条信息所占屏墓的宽度
      

  5.   

    Graphics.MeasureString可以测试出字符的实际宽度但是注意,因为种种原因(如空格),测试出的宽度比实际宽度略宽
      

  6.   

    给分吧 呵呵  这个帮你解决问题了~///  <summary>
        /// 按字符截字符串长度 
        ///  </summary> #region 截字符串
        ///  <param  name="strInput">字符串</param>
        ///  <param  name="startIndex">起始位置</param>
        ///  <param  name="length">长度</param>
        ///  <returns></returns>
       
        public  static string ByteSubString(string strInput,int startIndex,int length)
        {
            strInput = strInput.Trim();
            int  byteLen = Encoding.Default.GetByteCount(strInput);
            if  (byteLen>length)
            {
                string  resultStr = String.Empty;
                for (int i = startIndex/2; i < strInput.Length ; i++)
                {
                    if (Encoding.Default.GetByteCount(resultStr) < length)
                    {
                        resultStr += strInput.Substring(i,1);
                    }
                    else
                    {
                        break;
                    }
                }
                    return  resultStr;
             }
            else
            {
                return  strInput;
            }
         }
      

  7.   

    以前遇到过一个问题,页面上的新闻标题长度固定,新闻标题太长的,就按固定找度截取,如果新闻标题的内容包含字母、数字、中文,截取到的结果总会不令人满意。
    后来自己写了一个截取函数,其中循环判断每一个字符的asc码,如果小于0,就认为是汉字或全角字符,取一个这样的字符相当于两个英文字母。
    不知对楼主有没有用?
      

  8.   

    RunUpwind() 
    谢谢!我开始是用了你说的方法,但是达不到效果,信息量比较大,长短相差太大!!sp1234(真正的开发者不会简单地狮子大开口地提问) 
    谢谢!我把你那方法改了下:
    <span style= " word-break:keep-all; overflow: hidden;text;overflow:ellipsis;width:120%"></span>
    我的信息是放在一排的,不过还是有缺点,就是信息会被隐含掉一点点!!
      

  9.   

    补充一下kuiyouli(吾跃乾坤)的,你可以写:<span style= " OVERFLOW: hidden; WORD-BREAK: keep-all; TEXT-OVERFLOW: ellipsis;width:100%">
    adfad中国人民很行fasldfasdfasdfasdfas
    </span>这样你可以把标题放在td中,当table随之窗口宽度变化的时候,标题自动按照最合适的宽度截断。这样就比csdn论坛的那种忽然一行忽然两行的列表要好得多。当然最好判断一下浏览器类型。如果不判断,在非ie上应该也不会出错,只是不自动截断文字而已。
    width:100%是放在td里面会变两行,达不到效果;width:120%的话不会撑成两行,但会在td的边界上隐含掉一部分.
    继续求解好的方法!!
      

  10.   

    做过类似的,用的是
    byte[] byTemp = System.Text.Encoding.Default.GetBytes(v_strValue)
    基本上byTemp.Length相同,在页面上字符占的宽度想同
      

  11.   

    milozy1983(Detective) 
    说明下,我做的是生成静态页面的程序,用的是套模板的方法,一下子生成n个页面,每个页面n条信息.字符大小和字间距在每个生成页面都是一样的,不同的是信息的长度不一,采用截取字符的方式后长度还是长短不一.
    --------------------------------------------------------------------------------
    这个和生成静态页面无关,排版布局很多东西就是要靠css的,上面说的style的方法同样也是css,造成隐藏一点的原因是overflow: hidden;