注册 登录
编程论坛 C# 论坛

网络编程中文乱码问题

rohalloway 发布于 2019-07-29 12:30, 1974 次点击
程序代码:

public void SendMSGType(string msg, string type)
{
    if (type == "notice")
        SendPacketToClient(Opcodes.LocalNotice(msg));
}


程序代码:

public static Packet LocalNotice(string msg)
{
    return PacketBuilder.BuildPacket(0x3026, (byte)7, msg);
}


程序代码:

private static void BuildPacket(this Packet pck,object[] content)
{
    if(content.Count() > 0)
    {
        Parallel.ForEach(content.AsParallel(), obj =>
        {
            if (obj.GetType() == typeof(string))
                pck.WriteAscii(obj);

            if (obj.GetType() == typeof(ushort))
                pck.WriteUInt16(obj);

            if (obj.GetType() == typeof(uint))
                pck.WriteUInt32(obj);

            if (obj.GetType() == typeof(ulong))
                pck.WriteUInt64(obj);
        });
    }
}


程序代码:

public void WriteAscii(String value)
{
    WriteAscii(value, 1254);
}

public void WriteAscii(String value, int code_page)
{
    lock (m_lock)
    {
        if (m_locked)
        {
            throw new Exception("无法在锁定的数据包上进行写操作。");
        }
      
        //这3行代码是程序原版的
        
//byte[] bytes = Encoding.GetEncoding(code_page).GetBytes(value);
        
//m_writer.Write((ushort)bytes.Length);
        
//m_writer.Write(bytes);


        
//这3行代码是我写的,但转换为UTF8编码,游戏内中文依旧乱码。
        byte[] bytes = Encoding.GetEncoding("utf-8").GetBytes(value);
        m_writer.Write((ushort)bytes.Length);
        m_writer.Write(bytes);
    }
}


上面是整个调用过程涉及的函数,功能是向一个游戏内写入一些文本信息。
问题:该程序不支持中文字符。

请问如何修改才能支持中文字符?
我对C#不了解,希望大家帮帮我,谢谢!
0 回复
1