常见的字符集编码方式
-
ASCAII(American Standard Code for Information Interchange)
ASCAII由128个字符集组成,包括大小写字母、单个数字、标点符号等字符和一些控制字符。每个字符占用 1 个字节。 -
Unicode
Unicode 是国际通用的编码方式,这种编码每个字符都占用两个字节。中英文字符都是占用两个字节。C#中的字符和字符串默认采用的都是Unicode编码。 -
UTF-8(8-bit Unicode Transformation Format)
UTF-8的范围0 到 1,114,111(涵盖整个Unicode字符集,是Unicode的一种变长字符编码,用1~4个字节表示一个Unicode字符。中文字符占用3个字节,特殊情况下占用4个字节。 -
GB2312
GB2312 是中国国家标准的字符集,用于编码简体中文汉字,一个汉字占用两个字节。
Encoding类实现编码和解码
private void EncodeDecode(string str,Encoding encoding)
{
//将字符串编码为数组
byte[] bytes= encoding.GetBytes(str);
//将字节数组解码为字符串
string s = encoding.GetString(bytes);
}
private void EncodingConvert()
{
string str = "unicode,utf-8";
Encoding unicode = Encoding.Unicode;
Encoding utf8 = Encoding.UTF8;
//Convert将字节数组从一种编码转换为另一种编码,unicode编码转utf-8编码
byte[] bytes = Encoding.Convert(unicode,utf8,unicode.GetBytes(str));
string str2 = utf8.GetString(bytes);
}
网络流(NetworkStream )
NetworkStream 主要用于处理网络通信中的数据流,通过网络发送或接收数据,仅支持面向连接的套接字。
Write方法负责将字节数组从进程缓冲区发送到本机的TCP发送缓冲区,然后TCP/IP协议栈再通过网络适配器把数据真正发送到网络上,最终到达接收方的TCP接收缓冲区。
获取NetworkStream对象
1、利用TcpClient对象的GetStream方法得到网络流对象。
NetworkStream networkStream= myTcpClient.GetStream();
2、利用Socket得到网络流对象。
NetworkStream networkStream = new NetworkStream(mySocket);
发送数据
Write方法为同步方法,在将数据写入到网络流之前,Write方法一直处于阻塞状态,直到发送成功或返回异常为止。
if (networkStream.CanWrite)
{
byte[] writeBuffer = Encoding.UTF8.GetBytes("abcd");
networkStream.Write(writeBuffer,0,writeBuffer.Length);
}
接收数据
接收方法通过调用Read方法将数据从接收缓冲区读到进程缓冲区,完成读操作。
if (networkStream.CanRead)
{
byte[] readBuffer = new byte[1024];
int readBytesCount = 0;
do
{
readBytesCount = networkStream.Read(readBuffer,0,readBuffer.Length);
} while (networkStream.DataAvailable);
}