中英文字符长度

时间:2021-03-26 20:11:40

<%
function gotTopic(str,strlen)
dim l,t,c, i
l=len(trim(str))
t=0
for i=1 to l
 c=Abs(Asc(Mid(str,i,1)))
 if c>255 then '如果是汉字为2个字节
  t=t+2
  else
  t=t+1
 end if
 if t>=strlen then
  gotTopic=left(str,i)&".."
  exit for
' else
'  gotTopic=str
 end if
next
end function

%>
<%=gotTopic("12中5文634", 5)%>

==========================

求i, 如果i所处的字符>strLen则取ok

==================================

function decodeHTML(fString)
if not isnull(fString) then
    fString = replace(fString, "&gt;", ">")
    fString = replace(fString, "&lt;", "<")

    fString = Replace(fString, "&nbsp;", CHR(32))
    fString = Replace(fString, "&nbsp;", CHR(9))
    fString = Replace(fString, "&quot;", CHR(34))
    fString = Replace(fString, CHR(39),"&#39;")
    fString = Replace(fString, "</P><P> ",CHR(10) & CHR(10))
    fString = Replace(fString, "<BR> ", CHR(10))
    decodeHTML = fString
end if
end function

function cut_title(content, content_len)
 content=decodeHTML(content)
 if strlen(content)>content_len*2 then
  resultStr=""
  i=1
  temp=0
  do while i<=content_len
   if Asc(mid(content,i,1)&"中")<0 then   
   resultStr = resultStr + mid(content,i,1)'中文
   'temp=2
   else    
   resultStr = resultStr + mid(content,i,1)'en文
   content_len =content_len+0.5
    temp=temp+1
    if temp=2 then
    temp=0
    end if
   end if
   end if
   i=i+1
  loop
  if temp = 1 then '借助辅助变量才做。也可求content_len是否有0.5, 这也是求对最后一个字符进行处理的好办法
   if Asc(mid(content,i,1)&"中")<0 then   
   else
   resultStr = resultStr + mid(content,i,1)
   end if   
  end if  
  cut_title= resultStr  
 else
  cut_title = content
 end if
end function

function strlen(str)
dim p_len
p_len=0
strlen=0
if trim(str)<>"" then
p_len=len(trim(str))
for xx=1 to p_len
if asc(mid(str,xx,1))<0 then
strlen=int(strlen) + 2
else
strlen=int(strlen) + 1
end if
next
end if
end function

我自已写的,严格控制,字符为中文的长度,只能小于,不能大于.

=======================================

 private static string GetLenStr(String ss,int maxLength)
  {
   if(ss.Length > maxLength)
   {
    string retstr = "";
    Char[] cc=ss.ToCharArray();
    int intLen=ss.Length;
    int i;
    if("豆腐".Length==4)
    {
     //是非 中文 的 平台
     return ss.Substring(0, maxLength);
    }
    int temp = 0;
    for(i=0;i<maxLength;i++)
    { 
     retstr += cc[i];
     if(!IsTwoBytesChar(cc[i]))
     {
      temp += 1;
      if(temp == 2)
      {
       temp = 0;
      }
      else
      {
       maxLength ++;
      }
     }
    }
    if(temp == 1)
    {
     retstr = retstr.Substring(0, retstr.Length-1);
    }
    return retstr;
   }
   else
   {
    return ss;
   }
  }

  public static bool IsTwoBytesChar(char chr)
  {
   string str =chr.ToString();
   // 使用中文支持编码
   Encoding ecode = Encoding.GetEncoding("GB2312");
   if (ecode.GetByteCount(str) == 2)
   {
    return true;
   }
   else
   {
    return false;
   }
  }

===========================

 

对于编写一个程序,先只需考虑正常情况即可,然后再增加非正常代码。

一次只做一件事,如果考虑太多了,往往都不知从何入手.

1)正常怎样处理就怎样编写。可以先留下一些bug, 做好注释就好

2)多重循环按从内到外。

单循环中的一些处理,包括重叠处理。

temp=0

for ()

temp++;

if(temp=5)

{

tmep=0;

}

}

====================================

function decodeHTML(fString)
if not isnull(fString) then
    fString = replace(fString, "&gt;", ">")
    fString = replace(fString, "&lt;", "<")

    fString = Replace(fString, "&nbsp;", CHR(32))
    fString = Replace(fString, "&nbsp;", CHR(9))
    fString = Replace(fString, "&quot;", CHR(34))
    fString = Replace(fString, CHR(39),"&#39;")
    fString = Replace(fString, "</P><P> ",CHR(10) & CHR(10))
    fString = Replace(fString, "<BR> ", CHR(10))
    decodeHTML = fString
end if
end function

function cut_str(content, content_len)
 if len(content)>content_len then
  cut_str=decodeHTML(content)
  cut_str = Left(content, (content_len-2))&".."
 else
  cut_str = content
 end if
end function

'function cut_title(content, content_len)
' if len(trim(content))>content_len then
'  content=decodeHTML(content)
'  cut_title = Left(content, content_len)
' else
'  cut_title = content
' end if
'end function

'function cut_title(content, content_len)
' content=decodeHTML(content)
' if strlen(content)>content_len*2 then
'  resultStr=""
'  i=1
'  temp=0
'  do while i<=content_len
'   if Asc(mid(content,i,1)&"中")<0 then   
'   resultStr = resultStr + mid(content,i,1)'中文
'   else    
'   resultStr = resultStr + mid(content,i,1)'en文
'   content_len =content_len+0.5
'   temp=temp+1
'    if temp=2 then
'    temp=0
'    end if
'   end if
'   i=i+1
'  loop
'  if temp = 1 then
'   if Asc(mid(content,i,1)&"中")<0 then   
'   else
'   resultStr = resultStr + mid(content,i,1)
'   end if   
'  end if  
'  cut_title= resultStr  
' else
'  cut_title = content
' end if
'end function


function cut_title(str,strlen) '将求长度及截取合并
str=decodeHTML(str)
'strlen=strlen*2 '汉字标准
dim l,t,c, i
l=len(trim(str))
t=0
for i=1 to l
 c=Abs(Asc(Mid(str,i,1)))
 if c>255 then '如果是汉字为2个字节
  t=t+2
  else
  t=t+1
 end if
 if t>strlen then
  cut_title=left(str,i-1)&"."
  exit for
 end if
next
if t=strlen then
  cut_title=left(str,i)
elseif t<strlen then
 cut_title=str
end if
end function

function cut_title_class(str,strlen) '将求长度及截取合并
str=decodeHTML(str)
'strlen=strlen*2 '汉字标准
dim l,t,c, i
l=len(trim(str))
t=0
for i=1 to l
 c=Abs(Asc(Mid(str,i,1)))
 if c>255 then '如果是汉字为2个字节
  t=t+2
  else
  t=t+1
 end if
 if t>strlen then
   cut_title_class=left(str,i-1)
   exit for
 end if
next
if t=strlen then
  cut_title_class=left(str,i)
elseif t<strlen then
 cut_title_class=str
end if
end function

function strlen(str)
dim p_len
p_len=0
strlen=0
if trim(str)<>"" then
p_len=len(trim(str))
for xx=1 to p_len
if asc(mid(str,xx,1))<0 then
strlen=int(strlen) + 2
else
strlen=int(strlen) + 1
end if
next
end if
end function
%>