关于C#中字符串中英文字符长度截取问题。

parkey 2002-07-02 02:41:50
String.Length是字符串的字符长度,而非字节长度。
如String str1="这是一个C#语言中的字符串";
String str2="This is a string in C#";
str1.Length=13 (实际字节24)
str2.Length=22 (实际字节22)


因为在DataGrid中显示的长度有限,我想对字符串进行截取,最多显示20字节的内容。用SubString的话,也只能对字符进行截取。
请教各位大虾,怎样判断String的实际字节长度,使之只保留前面20字节的内容(如果是出现半个中文字符,则丢弃)?

...全文
1522 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
parkey 2002-07-03
  • 打赏
  • 举报
回复
搞定了!!!用 cometsky(天空中自由翱翔的彗星) 和acptvc(微软全球技术中心 VC技术支持) 的方法先用System.Text.Encoding.Unicode.GetBytes()将String类型字符串转换为byte[]数组,处理完数组后再用System.Text.Encoding.Unicode.GetString重新将字节数组解码为字符串。
frb_csharp(西沙坡)的想法也不错,但是我觉得应该判断字符是否为汉字会好一点。可是我没有深究,还不知怎么判断一个字符是否为中文。
给分!
frb_csharp 2002-07-02
  • 打赏
  • 举报
回复
我的方法笨,但也许能解决你的问题。
写一个判断的方法,判断每一个字符是英文(或相符号)与否,如果是,则长度计数器加1;如果不是,一般应为汉字,则计数器加2。加到20为止,如果是21,只取19。

如果有帮助,别忘了给点分!^o^
acptvc 2002-07-02
  • 打赏
  • 举报
回复
To parkey (Parkey) :

在.NET中所有的字符串(String)处理中,都能够自动的辨认单字节字符和双字节字符(即surrogate aware),无论是计算字符串长度还是定位(Index)时,两者都被视作一个字符。

如果需要区分字符串中的中文字符和英文字符,需要将String以Unicode编码方式转换成byte[],然后通过判断高位的值来获知该字符属于中文或英文,例如:

string str="2002年世界杯";
byte[] bytes=System.Text.Encoding.Unicode.GetBytes(str);

这时,bytes中的值为:
- bytes {Length=16} byte[]
[0] 50 byte
[1] 0 byte
[2] 48 byte
[3] 0 byte
[4] 48 byte
[5] 0 byte
[6] 50 byte
[7] 0 byte
[8] 116 byte
[9] 94 byte
[10] 22 byte
[11] 78 byte
[12] 76 byte
[13] 117 byte
[14] 111 byte
[15] 103 byte
在这个数组的基础上进行简单的顺序访问就可以完成你所希望完成的功能。

另外,由于Win98和Win2000/XP对Unicode的支持有很大的不同,因此与Unicode有关的字符串操作在Win98上可能会产生与Win2000/xp上完全不同的结果,需要在具体编程时注意在不同平台上的兼容性测试。



- 微软全球技术中心 acptvc

本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。具体事项可参见使用条款(http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。
为了为您创建更好的讨论环境,请参加我们的用户满意度调查(http://support.microsoft.com/directory/worldwide/zh-cn/community/survey.asp?key=(S,49854782))。
cometsky 2002-07-02
  • 打赏
  • 举报
回复
具体步骤:
用Encoding.GetBytes(
string s,
int charIndex,
int charCount,
byte[] bytes,
int byteIndex
);
取得一个20 Byte的byte[],
再用public virtual string GetString(byte[] bytes);
cometsky 2002-07-02
  • 打赏
  • 举报
回复
在.net里面,字符都是用Unicode来表示的,可能是没有办法做到你说的功能。
不过你可以看一看System.Text.Encoder,可能有帮助。

110,568

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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