如何知道string里有多少个字符?string.Length不正确。 例如:string s=" 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 那么,为什么:string s="我";看看s.Length是1,不是2? Length因该输出是1才对GetBytes().Length 才是2 string的Length,返回的不是字节数,而是字符数。 应该跟编码没关系,string.length就是包含字符的个数,你是不是包含了两个空格 没有。你可以试试。string s1=" System.Globalization.StringInfo sInfo = new System.Globalization.StringInfo(s); int i= sInfo.LengthInTextElements; Length 是字符长度 汉字 数字 字母 返回的都是1string s=" 不是半角问题,也不是全角问题。我觉得应该是微软的Bug。[Quote=引用 11 楼 的回复:] Length 是字符长度 汉字 数字 字母 返回的都是1string s=" 转成 unicode 是 \ud866\udc3a ��确实是2个组成的 那,就是说,应该是Bug了因为Length不能正确统计字符的个数。 汉字的总量远远不止两万个,而双字节的资源已“用尽”,其它的汉字编码只能使用更多的字节。按理说二字节放不下就该用三字节编码,但令人费解的是GB18030—2000跳过了三字节不用而采用了四字节编码,本标准中收入四字节编码汉字6530个。若对《中华字海》中全部八万多汉字编码,其中会有六万多是四字节编码。 GB18030—2000的“引用标准”中包括国家技术标准GB13000.1—93(信息技术 通用多八位编码字符集(UCS) 第一部分:体系结构与多文种平面)。在GB13000.1—93中有如下一段文字: “在正则形式中,用四个八位来表示每一个字符,并相应地指定组、平面、行和字位,由于两个八位不足以包容世界上的所有字符,而32位的表示又符合现代处理系统的体系结构,所以正则形式由四个八位组成。” 只能说 length把4字节的汉字算成了2个2字节的汉字生僻词才会出现我试了 其他语言也一样 应该是底层的问题 但关键是:我现在要统计“字符数”,而不是统计“字节数”。如果给一大段文字,该怎么统计“字符数”?有些字符占2字节,有些占3字节,有些占4字节。这样也太难统计了吧。反正,用Length是不正确的了。 Length 属性返回此实例中 Char 对象的个数,而不是 Unicode 字符个数。 原因在于一个 Unicode 字符可能会用多个 Char 表示。 使用 System.Globalization.StringInfo 类来处理每个 Unicode 字符而不是每个 Char。 上面是MSDN的官方解释,和本地化语言有关系找了找代码,下面的可以解决(从MSDN修改的)[code=C#] string s = " 你统计的字符数 可能存储在数据库中会造成超过最大值如 sql中 nvarchar(100)你统计的字符数是100 但是有2个4字节的汉字那你存入数据库就超长了2个字符何必呢 就按2个汉字统计好了 这个方法好像可以啊。多测试几遍先。[Quote=引用 21 楼 的回复:]C# codestring s = " 第一个字符,是特殊字,有两个字符组成的;string.length是用来统计字符串中的字符个数的。PS:第一个字怎么拼出来的啊,表示手写输入都没有找到这个字。 21楼正解 对于有的字符 需要两个unicode来表示 其中第一个叫高位代理 第二个叫做低位代理 通过这两个unicode就可以表示100w个左右的字符 事实上楼主需要的是叫做“文本”的长度,而length返回的是“字符”的长度 一般统计字符个数都是先Trim()的。 我这写了一个程序运行了一下,出现下面的结果,是什么情况呢?(怎么回复不能贴图片呢?好麻烦哦)(我用的是vs2008运行的)#include <iostream>#include <string.h>using namespace std;int main(int args,char **argv){ string s1=" C#怎么判断查找文件夹中的TXT是否存在 大侠,求助! COM1端口的问题? 求教一个C#简单的设置 奇怪,这是什么问题啊? 散分论文被老师批评 能否将字符串转换为变量名? adsi问题 在Win xp pro和Win2k server上的v c#有什么差别? c#中关于dataset的问题 vs2010打包生成程序 table里1行3列,左边固定,中间跟右边自动调整,如何实现?
看看s.Length是1,不是2?
GetBytes().Length 才是2
int i= sInfo.LengthInTextElements;
汉字 数字 字母 返回的都是1
string s="
汉字 数字 字母 返回的都是1
string s="
��确实是2个组成的
GB18030—2000的“引用标准”中包括国家技术标准GB13000.1—93(信息技术 通用多八位编码字符集(UCS) 第一部分:体系结构与多文种平面)。在GB13000.1—93中有如下一段文字:
“在正则形式中,用四个八位来表示每一个字符,并相应地指定组、平面、行和字位,由于两个八位不足以包容世界上的所有字符,而32位的表示又符合现代处理系统的体系结构,所以正则形式由四个八位组成。”
生僻词才会出现
我试了 其他语言也一样 应该是底层的问题
上面是MSDN的官方解释,和本地化语言有关系找了找代码,
下面的可以解决(从MSDN修改的)[code=C#] string s = "
如 sql中 nvarchar(100)
你统计的字符数是100 但是有2个4字节的汉字
那你存入数据库就超长了2个字符何必呢 就按2个汉字统计好了
string s = "
string.length是用来统计字符串中的字符个数的。PS:第一个字怎么拼出来的啊,表示手写输入都没有找到这个字。
(我用的是vs2008运行的)
#include <iostream>
#include <string.h>
using namespace std;
int main(int args,char **argv)
{
string s1="