using System;
using System.Text.RegularExpressions;

namespace LangZi
{
    /**//// <summary>
    /// StringHelper 的摘要说明。
    /// </summary>
    public class StringHelper
    
{
        public StringHelper()
        
{
            //
            // TODO: 在此处添加构造函数逻辑
            //
        }

        GetLength#region GetLength
        /**//// <summary>
        /// 返回包含中文字符的字符串长度
        /// C# 的string.Length中中文字只做1位统计,所以要将其转换为2位
        /// </summary>
        /// <param name="strSource">要统计长度的字符串变量</param>
        /// <returns>字符串长度</returns>
        public static int GetLength(string strSource)
        
{
            Regex regex = new Regex("[\u4e00-\u9fa5]+", RegexOptions.Compiled);
            int nLength = strSource.Length;

            for(int i=0; i<strSource.Length; i++)
            
{
                if (regex.IsMatch(strSource.Substring(i,1))) 
                
{
                    nLength++;
                }
            }

            return nLength;
        }
        #endregion
    }
}

使用:

int iLength= LangZi.StringHelper.GetLength(source)


土人用最土的办法,以求实现自己的目标,看了银河兄的C#中的字符编码问题 一文,发现有更好更完善的方法:


using System;

using System.Text;


namespace LangZi

{

    /**//// <summary>

    /// StringHelper 的摘要说明。

    /// </summary>

    public class StringHelper

    

{

        public StringHelper()

        

{

            //

            // TODO: 在此处添加构造函数逻辑

            //

        }


        GetLength#region GetLength

        /**//// <summary>

        /// 返回包含中文字符的字符串长度

        /// C# 的string.Length中中文字只做1位统计,所以要将其转换为2位

        /// </summary>

        /// <param name="strSource">要统计长度的字符串变量</param>

        /// <returns>字符串长度</returns>

        public static int GetLength(string strSource)

        

{

             return Encoding.GetEncoding("GB18030").GetBytes(strSource).Length; 

        }

        #endregion

    }

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

相关评论:

# re: 利用正则表达式计算含有中文的字符串长度 2005-08-25 14:06 | waxwork3

字符要先转为unicode吧.

# re: 利用正则表达式计算含有中文的字符串长度 2005-08-25 14:21 | 浪子

@waxwork3
我是用UTF-8(Unicode)生成的txt...
Length的时候好象只算1位,导致我EDI报文的处理经常错位.最后发现是这个问题.

# re: 利用正则表达式计算含有中文的字符串长度 2005-08-25 16:33 | waxwork3

编码信息在于文件的头几个字节, 可以先判断它再进行相应的转换.

# re: 利用正则表达式计算含有中文的字符串长度 2005-08-25 17:21 | 浪子

@waxwork3
即使不生成文件的时候,也是如此.如下



Page.Response.Write("<script>alert('"+"中文".Length+"')</script>");



得到是2,所以应该说跟格式无关,应该是C#处理的时候就是算1位.

我不是太明白你所说的操作的目的.


# re: 利用正则表达式计算含有中文的字符串长度 2005-08-26 07:46 | waxwork3

@浪子
可能是我会错意了.
中文编码很多, 与Unicode有一一映射的关系, 我是想说, 在你计算一个文件中的中文字数的时候首先应该知道是什么编码, 再加以计算. 

# re: 利用正则表达式计算含有中文的字符串长度 2005-12-28 16:35 | 孙健

我按住Alt+小键盘97输入了一个a,第二种方法挂掉了。