如何确定对传入的非拉丁套接字数据使用哪个编码器
本文关键字:数据 套接字 编码器 何确定 | 更新日期: 2023-09-27 18:06:42
我在c# . net中有一个套接字侦听器,用于侦听连接。这些连接主要来自俄罗斯或中国客户端,这些客户端可以向服务器发送非拉丁字符的数据。如何确定套接字传入数据的正确编码器。我使用这个代码,但与其他数据比拉丁字符似乎只返回?????识字课。
byte [] buffer = new byte[1024];
int iRx = m_socWorker.Receive (buffer);
char[] chars = new char[iRx];
System.Text.Decoder d = System.Text.Encoding.UTF8.GetDecoder();
int charLen = d.GetChars(buffer, 0, iRx, chars, 0);
System.String szData = new System.String(chars);
txtDataRx.Text = szData;
编码是关于如何将字符写成一系列字节的协议。您无法查看一系列字节并确定使用哪种编码来创建它们。
您的代码目前使用UTF8来解码数据- UTF8能够存储俄文和中文字符,但您必须确保客户端将数据编码为UTF8。
此外,要显示这些字符,你必须有一个支持这些语言的字体(俄语很常见,因为它在字母表中包含固定数量的字符,而中文有数千个不同的"字母",你可能需要下载一个字体,使它们出现在你的屏幕上)。通常,虽然不支持的字符会显示为空的方框,但当使用编码不支持的字符时,会生成问号。
Joel写了一篇文章,里面有更多关于编码的(基本)信息。