我一个字符串里面有汉字和字符。string m_strLine="";
for ( int i=0; i < count;i++)
{
Char ch = Convert.ToChar(buf[i]);
switch( ch )
{
case '\r': 
m_strLine += Convert.ToString("\r\n"); 
break;
case '\n': 
break;
default: 
m_strLine += Convert.ToString(ch);
break;

}我像这样转化过去,但是转化过来,就不对了,转成char的时候也发现不对。里面还有乱码??
谢谢回复!!

解决方案 »

  1.   

    这样当然是不对的,主要就是m_strLine += Convert.ToString(ch);这儿不对,如果有汉字就完了
      

  2.   

    这样当然是不对的,主要就是m_strLine += Convert.ToString(ch);这儿不对,如果有汉字就完了
      

  3.   

    byte[] bytesTemp = System.Text.Encoding.Default.GetBytes(变量值);
      

  4.   

    把一个字符串转换成字节使用
    byte[] bytesTemp = System.Text.Encoding.Default.GetBytes(某变量或"字符串");
    Encoding类中有很多中编码方式,比如UTF8,Gb2312等等,推荐你是用UTF8的,
    如果要转换回来就是用,
    string getstr = Encoding.UTF32.GetString( 字节型变量比如上面的 bytesTemp )函数返回string
      

  5.   

    把一个字符串转换成字节使用 
    byte[] bytesTemp = System.Text.Encoding.GetEncoding("gb2312").GetBytes("字符串");
    如果要转换回来就是用
    string getstr = Encoding.GetEncoding("gb2312").GetString(bytesTemp)
      

  6.   

    说两点吧:
         首先,在我们的计算机里的字符默认编码是ASCII吗,所以如果用System.Text.Encoding.Default.GetBytes(变量值),你得到的是ASCII值,得到字符的ASCII值是你问题中要解决的第一步。
         第二,我们要对得到的ASCII值要有一个判断,汉字在ASCII里有一个编码范围,如果在这个编码范围内,你需要给他设一个输出,如果不是直接输出好了,这样就能解决遇到汉字的一部分问题。如果真要将汉字输出可能还需要加判断。
      

  7.   

    [Quote=引用 3 楼
    C# codeEncoding.Default.GetString(buffer);
    [/Quote]
      

  8.   

    首先谢谢大家的回复,其实我在这前面也调用了getEncodeing("gb2312")的但是我,由于telnet网络编程,要用到telnet协议去解析,就必须转化为CHAR:private void Receive()
    {
    //用于接收数据的缓冲
    byte[] buf;
    buf = new byte[max_char];
    int count=socket.Receive(buf);
    if (count>0)
    {
    string sRecieved = Encoding.GetEncoding("gb2312").GetString(buf, 0, count );

    string m_strLine="";
    for ( int i=0; i < count;i++)
    {
    Char ch = Convert.ToChar(buf[i]);
    switch( ch )
    {
    case '\r': 
    m_strLine += Convert.ToString("\r\n"); 
    break;
    case '\n': 
    break;
    default: 
    m_strLine += Convert.ToString(ch);
    break;

    }
    try
    {
    int strLinelen = m_strLine.Length ;
    if ( strLinelen == 0 ) 
    {
    m_strLine = Convert.ToString("\r\n");
    } Byte[] mToProcess = new Byte[strLinelen];
    for ( int i=0; i <  strLinelen ; i++)
    mToProcess[i] = Convert.ToByte(m_strLine[i]);
    // Process the incoming data
    string mOutText = ProcessOptions(mToProcess);
    if ( mOutText != "" ) 
    SetReMsg(mOutText,_sendStatus);
    RespondToOptions();
    }
    catch( Exception ex )
    {
    Object x = this ;
    MessageBox.Show(ex.Message , "Information!" );
    }
    }
    else
    {
    socket.Shutdown( SocketShutdown.Both );
    socket.Close();
    }
    }
    #endregion #region ProcessOptions
    private string ProcessOptions(byte[] m_strLineToProcess)
    {
    string m_DISPLAYTEXT ="";
    string m_strTemp ="" ;
    string m_strOption ="";
    string m_strNormalText ="";
    bool bScanDone =false;
    int ndx =0;
    int ldx =0;
    char ch ;
    try
    {
    for ( int i=0; i < m_strLineToProcess.Length ; i++)
    {
    Char ss = Convert.ToChar(m_strLineToProcess[i]);
    m_strTemp = m_strTemp + Convert.ToString(ss);
    }
                   
    while(bScanDone != true )
    {
    int lensmk = m_strTemp.Length;
    ndx = m_strTemp.IndexOf(Convert.ToString(IAC));
    if ( ndx > lensmk )
    ndx = m_strTemp.Length; if(ndx != -1)
    {
    m_DISPLAYTEXT+= m_strTemp.Substring(0,ndx);
    ch = m_strTemp[ndx + 1];
    if ( ch == DO || ch == DONT || ch == WILL || ch == WONT ) 
    {
    m_strOption = m_strTemp.Substring(ndx, 3);
    string txt = m_strTemp.Substring(ndx + 3);
    m_DISPLAYTEXT+= m_strTemp.Substring(0,ndx);
    m_ListOptions.Add(m_strOption);
    m_strTemp = txt ;
    }
    else
    if ( ch == IAC)
    {
    m_DISPLAYTEXT= m_strTemp.Substring(0,ndx);
    m_strTemp = m_strTemp.Substring(ndx + 1);
    }
    else
    if ( ch == SB ) 
    {
    m_DISPLAYTEXT= m_strTemp.Substring(0,ndx);
    ldx = m_strTemp.IndexOf(Convert.ToString(SE));
    m_strOption = m_strTemp.Substring(ndx, ldx);
    m_ListOptions.Add(m_strOption);
    m_strTemp = m_strTemp.Substring(ldx);
    }
    }
    else
    {
    m_DISPLAYTEXT = m_DISPLAYTEXT + m_strTemp;
    bScanDone = true ;
    }

    m_strNormalText = m_DISPLAYTEXT; 
    }
    catch(Exception eP)
    {
    MessageBox.Show(eP.Message , "Application Error!!!" , MessageBoxButtons.OK , MessageBoxIcon.Stop );
    Application.Exit();
    }
    return m_strNormalText ;
    }大家帮个忙看有什么好的方法不,让起可以显示汉字.我对telnet不是怎么了解!谢谢大家!!