日期:2014-05-19  浏览次数:20882 次

请教C#中字符串代码格式的问题。
我从一个文件中导入数据,此文件是用PB生成的,其中有汉字的化就会出现问题,如果是数字的话就没事

比如:“2006-10311204   TK10X.1           103104后侧轿壁2262×550                                                                   套     2.00         发纹不锈钢                                                                                 ”

(注意这其中有空格)

然后,我用str.Length返回的字符数总是不正确,应该是144个,在C#中只返回133个。
我用
byte[]   bt   =   System.Text.Encoding.GetEncoding( "gb2312 ").GetBytes(str);
string   ss   =   System.Text.Encoding.GetEncoding( "gb2312 ").GetString(bt);
转换后的值没错,就是字符数量不正确,可是我将转换后的字符串copy到其它的文本编辑器中,显示的字符数量都是144,只是在C#中用Length或Substring操作的值都不正确。

请问是怎么回事,谢谢!



------解决方案--------------------
莫非你的144是字节数
要知道中文是两个字节,算算的话正好是144字节。

str.Length得到的是字符数,也就是133


不知解释明白否。
------解决方案--------------------
C#中string类型的Length属性表示的是字符数,而不是字节数
汉字存储当然是2个字节啦,但在C#中被当作一个字符看待
string相关的函数都是以字符数为准而不是字节数

string s= "我a是b人 ";
string _sub = s.substring(2,2);
此时_sub的值应为 "a是 "

------解决方案--------------------
byte[] bt = System.Text.Encoding.GetEncoding( "gb2312 ").GetBytes(str);
string ss = System.Text.Encoding.GetEncoding( "gb2312 ").GetString(bt);
改为:
byte[] bt = System.Text.Encoding.Default.GetBytes(str);
string ss = System.Text.Encoding.Default.GetString(bt);

------解决方案--------------------
中文是两个字节
------解决方案--------------------
/// <summary>
/// 获取实际的字符串长度
/// </summary>
/// <param name= "strInput "> </param>
/// <returns> </returns>
public static int Lenb(string strInput)
{
return Regex.Replace(strInput, "[^\x00-\xff] ", "** ").Length;
}