如何确定对传入的非拉丁套接字数据使用哪个编码器

本文关键字:数据 套接字 编码器 何确定 | 更新日期: 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写了一篇文章,里面有更多关于编码的(基本)信息。