【问题标题】:Unicode data over socket in C# client & C++ serverC# 客户端和 C++ 服务器中套接字上的 Unicode 数据
【发布时间】:2018-04-26 16:14:54
【问题描述】:

我有一个 C# 客户端和一个 C++ 服务器。我通过套接字发送用户的 Facebook 名称。我在开头写了名字的长度。例如: 05/*sizeofname*/ getbytes("asdfg") 我没有收到错误。但如果我尝试这样做: 05/*size of name*/ getbytes("İasdf"),它只读取İasd 因为İ 有两个字节。但其他字母有 1 个字节。我不知道如何在 C++ 服务器中正确读取它。

服务器 C++:

byte firstlen = packet.byteread();
                if (firstlen >= 150 || firstlen <= 0) { printf("first %d came\n", firstlen); goto hataver; }
                char * firstname = new char[firstlen];
                firstname = (char*)packet.charread(firstlen);
                printf("income firstname = %s\n", firstname);

char * charread(int idlen)
{
    char * retarray = new char[idlen];
    memcpy(retarray, buffs + marker, idlen);
    marker += idlen;
    retarray[idlen] = 0;
    return retarray;
}

客户端 C#

yenisi.eklestrlen(firstname, (byte)sizeof(profile.FirstName)); //(byte)firstname.Length);

    public void eklestrlen(string eklenecek,byte uzunluk)
    {
        ekle1(uzunluk);
        ekles(eklenecek);
    }

    public void ekle1(byte eklenecek)
    {
        Paket2[marker] = eklenecek;
        marker++;// eklenecek.Length;
    }

    public void ekles(string eklenecek2)
    {
        byte[] eklenecek = Encoding.UTF8.GetBytes(eklenecek2);
        Array.Copy(eklenecek, 0, Paket2, marker, eklenecek.Length);
        marker += eklenecek.Length;

    }

【问题讨论】:

标签: c# c++ string sockets unicode


【解决方案1】:

如果“İ”有两个字节而其他字节有一个,则您很可能使用 UTF8 编码对字符串值进行编码。

您没有共享足够多的 C++/C# 代码来了解具体发生了什么。在 C 端,您应该可以使用 strlen 来获取字符串的大小。

在 C# 端,您可以使用 Encoding.UTF8.GetByteCountEncoding.UTF8.GetBytes 将字符串转换为字节数组,使用 Encoding.UTF8.GetString 将字节数组转换为字符串。

【讨论】:

  • 我添加了我的代码。我不知道该怎么做,因为如果我尝试从 C++ 中的数组中读取字符串,例如“İ”字母有 2 个字节,如 c3 04,但英文字母(例如“V”)是 56,所以 IDK 如何读取它们。
猜你喜欢
  • 2012-05-18
  • 2017-05-26
  • 2011-08-22
  • 2014-03-10
  • 2015-09-07
  • 2012-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多