正确编码以使瑞典字符正常工作

Proper encoding for Swedish characters to work

提问人:Nitheesh Kedlaya 提问时间:2/23/2023 更新时间:2/23/2023 访问量:166

问:

这是我的应用程序的架构。

Client1(C# code)
SendMsg()
{
String input = "Östen"
  //Send to server Decode API
}


Server (C++ code )
Decode(string messageToSend)
{ 

    int size = MultiByteToWideChar(CP_ACP, MB_COMPOSITE, messageToSend.c_str(),
        messageToSend.length(), nullptr, 0);
    std::wstring utf16_str(size, '\0');
    MultiByteToWideChar(CP_ACP, MB_COMPOSITE, messageToSend.c_str(),
        messageToSend.length(), &utf16_str[0], size);

    int utf8_size = WideCharToMultiByte(CP_UTF8, 0, utf16_str.c_str(),
        utf16_str.length(), nullptr, 0,
        nullptr, nullptr);
    std::string utf8_str(utf8_size, '\0');
    WideCharToMultiByte(CP_UTF8, 0, utf16_str.c_str(),
        utf16_str.length(), &utf8_str[0], utf8_size,
        nullptr, nullptr);

}

Client 2 (C# code )
ShowMsg()
{
//Display msg which is received from server
//Here it displays as Östen instead of Östen
}

正如我在输出中所说,输出应该是正确的瑞典语字符。 很少有其他客户端使用相同的服务器 API 调用,并且它对他们有用,我觉得他们使用正确的编码。 所以我不想修改服务器代码。

想要对 Client1 代码进行更改。 即使用正确的编码。 我尝试了UTF-8,htmlencoding。W1252 .他们都不适合我。

任何人都可以帮助我在客户端中使用哪种编码。因此,相同的服务器 API 将对我有用。

C# C++ UTF-8 ASCII 编码

评论

0赞 Some programmer dude 2/23/2023
您是否尝试过以任何方式调试发送方(“客户端 1”)、服务器或接收方(“客户端 2”)?“客户端 1”发送的确切字节序列是什么?服务器接收的确切字节序列是什么?所有这些转换和转换对该字节序列做了什么?服务器发送的确切字节序列是什么?“客户端 2”接收的确切字节序列是什么?
0赞 Some programmer dude 2/23/2023
还要记住,如果你使用TCP套接字来发送和接收(不清楚你所说的“发送”和“接收”的确切含义),那么你必须记住,你需要一个协议来发送和接收数据在一个循环中,以确保整个消息被正确传输。
0赞 Nitheesh Kedlaya 2/23/2023
感谢您的回复,我的正确之处在于我没有客户端 2 的代码,或者我无法修改服务器代码。我只能修改客户端 1 中的编码类型
0赞 Nitheesh Kedlaya 2/23/2023
这 3 个是不同的 Windows 机器(客户端和服务器),这些是 Windows 应用程序
1赞 JosefZ 2/23/2023
你面临一个 mojibake 案例(在 Python 中的例子,因为它的普遍可理解性):返回 .随处切换到 UTF-8...'Östen'.encode( 'utf-8').decode( 'cp1252')Östen

答: 暂无答案