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

ASP.net求字符的宽度问题求解?
正在搞一个生成静态新闻页面的程序,里面生成的信息很乱(包括全角字符,汉字,数字,字母等),生成以后长短不一,(我在网上找了些截取字符串的方法,显示都效果不好,问题是双字节汉字的长度不完全等于两个字母的长度).

1.现在想求个可以计算每个字符在屏幕上的宽度的方法;
2.或者提供每种不同字体宽度的资料也可(如:Arial类12号字体宽度,包括汉字,数字,字母等不同字体占屏幕的宽度)

注意,我作的是web方面的程序,g.MeasureString(new   Font)这样的方法是行不通的.
各位支招,100分!!!

------解决方案--------------------
用css啊,字符大小和字间距都能调啊
------解决方案--------------------
另外相关的思路,可以参考我在另外一个贴子上的回复:

http://community.csdn.net/Expert/topic/5386/5386866.xml?temp=.0854761
------解决方案--------------------
Graphics.MeasureString

可以测试出字符的实际宽度

但是注意,因为种种原因(如空格),测试出的宽度比实际宽度略宽
------解决方案--------------------
给分吧 呵呵 这个帮你解决问题了~

/// <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;
}
}

------解决方案--------------------
以前遇到过一个问题,页面上的新闻标题长度固定,新闻标题太长的,就按固定找度截取,如果新闻标题的内容包含字母、数字、中文,截取到的结果总会不令人满意。
后来自己写了一个截取函数,其中循环判断每一个字符的asc码,如果小于0,就认为是汉字或全角字符,取一个这样的字符相当于两个英文字母。
不知对楼主有没有用?
------解决方案--------------------
做过类似的,用的是
byte[] byTemp = System.Text.Encoding.Default.GetBytes(v_strValue)
基本上byTemp.Length相同,在页面上字符占的宽度想同
------解决方案--------------------
milozy1983(Detective)
说明下,我做的是生成静态页面的程序,用的是套模板的方法,一下子生成n个页面,每个页面n条信息.

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