substring中有中文字符的问题

时间:2022-09-13 16:06:44
比如说有string a="中国                 dssd"
a.substring(0.20);
这样显示的时候会出问题,不能把中国显示出来
有没有更简单的方法将这个转成正确的中文。前提是不知道中文字符有几个

13 个解决方案

#1


关注

#2


a.Substring(0,2)

#3


a.Substring(0,2)

#4


这个我知道,问题是我已经做了一次substring了 比如说string b=a.substring(0,20)了。我要在b的基础上把中文字符读出来,而已中文字符有几个都不知道,不一定是两个

#5


没处理过这种问题,定一下

#6


string保存的是unicode,不会显示中文错误,楼主是不是想找出string中的中文字符?
CharEnumerator ce = s.GetEnumerator();

while(ce.MoveNext())
{
    Console.WriteLine(char.GetUnicodeCategory(ce.Current));
}
中文是OtherLetter,如果string里还有其它语言字符,只能获取u值判断了

#7


string txtstr = "中adfs国            dssd人";

string  returnstr = "" ;

for (int strint = 0 ; strint < txtstr.Length ; strint++)
{
string str = txtstr.Substring( strint , 1 );

//ASCIIEncoding ascii = new ASCIIEncoding();
System.Text.UTF8Encoding ascii = new System.Text.UTF8Encoding();

Byte[] encodedBytes = ascii.GetBytes(str);

string car = encodedBytes[0].ToString();
int i = encodedBytes.Length;

if(i>1) //1位的才是ASCII码
returnstr = returnstr + str ;
}


结果 returnstr = "中国人"
不知楼主是不是这个意思

#8


http://dotnet.aspx.cc/ShowDetail.aspx?id=48596EF2-8C16-47EE-1CD3-174E44FA9E24

这里有相关的操作,估计能帮你。

#9


如果有间隔符号的话,可以试试利用间隔符号处理
如果没有的话,以字节的方式判断字节长度吧

#10


其实就是怎么把已经转成string流的中文字符再转回中文

#11


gz

#12


其实是我说的有问题
应该是问用readline从文件里面读取的string(里面有中文),经过一系列如substring的操作。之后怎么把这个string里面的中文字符以中文的形式写入另外一个文件

#13


楼主应该看看我的回复,如果用foreach加上char.GetUnicodeCategory()速度又快,又能找出char的类别。substring()会创建大量temporary string对象,对于长字符串,大于64k的速度可以慢上一个数量级。
而且用字节数目判断有错误,\u03a0,这是pi的符号,他也占2字节。

#1


关注

#2


a.Substring(0,2)

#3


a.Substring(0,2)

#4


这个我知道,问题是我已经做了一次substring了 比如说string b=a.substring(0,20)了。我要在b的基础上把中文字符读出来,而已中文字符有几个都不知道,不一定是两个

#5


没处理过这种问题,定一下

#6


string保存的是unicode,不会显示中文错误,楼主是不是想找出string中的中文字符?
CharEnumerator ce = s.GetEnumerator();

while(ce.MoveNext())
{
    Console.WriteLine(char.GetUnicodeCategory(ce.Current));
}
中文是OtherLetter,如果string里还有其它语言字符,只能获取u值判断了

#7


string txtstr = "中adfs国            dssd人";

string  returnstr = "" ;

for (int strint = 0 ; strint < txtstr.Length ; strint++)
{
string str = txtstr.Substring( strint , 1 );

//ASCIIEncoding ascii = new ASCIIEncoding();
System.Text.UTF8Encoding ascii = new System.Text.UTF8Encoding();

Byte[] encodedBytes = ascii.GetBytes(str);

string car = encodedBytes[0].ToString();
int i = encodedBytes.Length;

if(i>1) //1位的才是ASCII码
returnstr = returnstr + str ;
}


结果 returnstr = "中国人"
不知楼主是不是这个意思

#8


http://dotnet.aspx.cc/ShowDetail.aspx?id=48596EF2-8C16-47EE-1CD3-174E44FA9E24

这里有相关的操作,估计能帮你。

#9


如果有间隔符号的话,可以试试利用间隔符号处理
如果没有的话,以字节的方式判断字节长度吧

#10


其实就是怎么把已经转成string流的中文字符再转回中文

#11


gz

#12


其实是我说的有问题
应该是问用readline从文件里面读取的string(里面有中文),经过一系列如substring的操作。之后怎么把这个string里面的中文字符以中文的形式写入另外一个文件

#13


楼主应该看看我的回复,如果用foreach加上char.GetUnicodeCategory()速度又快,又能找出char的类别。substring()会创建大量temporary string对象,对于长字符串,大于64k的速度可以慢上一个数量级。
而且用字节数目判断有错误,\u03a0,这是pi的符号,他也占2字节。