gpt4 book ai didi

c# - 通过Socket发送西里尔文字吗?

转载 作者:行者123 更新时间:2023-12-03 12:00:37 26 4
gpt4 key购买 nike

我在通过C#套接字发送西里尔字母“УБА221”时遇到问题。它变成了“#xxxxx221”。这是xxxxx,是我无法复制粘贴的5个奇怪的字母。

服务器端(接收端):

SocketPacket theSockId = (SocketPacket)asyn.AsyncState;
int iRx = theSockId.thisSocket.EndReceive(asyn);
char[] chars = new char[iRx + 1];
System.Text.Decoder d = System.Text.Encoding.UTF8.GetDecoder();
int charLen = d.GetChars(theSockId.dataBuffer, 0, iRx, chars, 0);
System.String szData = new System.String(chars);
TextLabel.Text =TextLabel.Text+ szData;

客户端(发送):
subtext = "УБА221";
byte[] byData = System.Text.Encoding.UTF8.GetBytes(subtext);
socket.Send(byData);

有什么想法为什么我的代码无法正常工作吗?

最佳答案

看一下如何编码文本以发送文本:

byte[] byData = System.Text.Encoding.UTF32.GetBytes(subtext);

现在看看如何将二进制数据解码回文本:
System.Text.Decoder d = System.Text.Encoding.UTF8.GetDecoder();

您正在使用UTF-32进行编码,并使用UTF-8进行解码。那是行不通的。您需要在两侧都使用相同的编码。

另请注意:
  • 无法保证您会在一个BeginReceive/EndReceive调用
  • 中收到完整的文本
  • 如果您只想解码单个字节数组,请使用Encoding.UTF8.GetString(bytes, 0, bytesToDecode)而不是通过Decoder进行操作。
  • 如果要处理在一个read调用中得到一部分字符然后又在另一read中得到一部分的情况,则需要使用Decoder,但是您需要在两次read调用之间保留Decoder,因为它存储了状态为“尚未解码的数据”。
  • 关于c# - 通过Socket发送西里尔文字吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21182605/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com