请教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;
}