ASP.net求字符的宽度问题求解?

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

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

注意,我作的是web方面的程序,g.MeasureString(new Font)这样的方法是行不通的.
各位支招,100分!!!
...全文
386 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangkun9999 2007-05-21
  • 打赏
  • 举报
回复
继续顶,求个完美解决办法(上面的方法可以实现,但都不是最好的办法)
milozy1983 2007-05-21
  • 打赏
  • 举报
回复
milozy1983(Detective)
说明下,我做的是生成静态页面的程序,用的是套模板的方法,一下子生成n个页面,每个页面n条信息.

字符大小和字间距在每个生成页面都是一样的,不同的是信息的长度不一,采用截取字符的方式后长度还是长短不一.
--------------------------------------------------------------------------------
这个和生成静态页面无关,排版布局很多东西就是要靠css的,上面说的style的方法同样也是css,造成隐藏一点的原因是overflow: hidden;
wwpewr 2007-05-21
  • 打赏
  • 举报
回复
做过类似的,用的是
byte[] byTemp = System.Text.Encoding.Default.GetBytes(v_strValue)
基本上byTemp.Length相同,在页面上字符占的宽度想同
wangkun9999 2007-05-21
  • 打赏
  • 举报
回复
补充一下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的边界上隐含掉一部分.


继续求解好的方法!!
wangkun9999 2007-05-21
  • 打赏
  • 举报
回复
RunUpwind()
谢谢!我开始是用了你说的方法,但是达不到效果,信息量比较大,长短相差太大!!

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

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

/// <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;
}
}
KKND2006 2007-05-21
  • 打赏
  • 举报
回复
Graphics.MeasureString

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

但是注意,因为种种原因(如空格),测试出的宽度比实际宽度略宽
wangkun9999 2007-05-21
  • 打赏
  • 举报
回复
sp1234(真正的开发者不会简单地狮子大开口地提问)
谢谢,我先试试你提供的方法,看下效果!!
另外还是想问下有没有方法可以求字符占屏幕的宽度?
wangkun9999 2007-05-21
  • 打赏
  • 举报
回复
原因我上面说了,全角字符,汉字,数字,字母这些在屏幕上所占宽度是不一致的,我生成的效果如下:
.测试测试...
.ss测试s...
我的问题想精准的求出每条信息所占屏墓的宽度
  • 打赏
  • 举报
回复
另外相关的思路,可以参考我在另外一个贴子上的回复:

http://community.csdn.net/Expert/topic/5386/5386866.xml?temp=.0854761
wangkun9999 2007-05-21
  • 打赏
  • 举报
回复
milozy1983(Detective)
说明下,我做的是生成静态页面的程序,用的是套模板的方法,一下子生成n个页面,每个页面n条信息.

字符大小和字间距在每个生成页面都是一样的,不同的是信息的长度不一,采用截取字符的方式后长度还是长短不一.
milozy1983 2007-05-21
  • 打赏
  • 举报
回复
用css啊,字符大小和字间距都能调啊

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧