具有std::string、cout、of stream和sockets的字符集



我正试图通过windows套接字连接发送字符串,这些字符串包含ASCII表外的"á"等字符。当我尝试这样的东西时,我听到垃圾从另一端粉碎:

std::string message("á");
retval = send(conn_socket, message.c_str(), message.length(), 0);

所以我开始调查,发现需要使用UTF8之类的东西进行编码。虽然我仍在寻找一种在C++中实现这一点的简单方法,但我对我注意到的流行为有一个问题:

为什么std::ofstream << message会正确输出á,而cout << message会输出垃圾?这两个有什么区别?当通过套接字发送这些字符时,我可以利用这一点吗?

使用std::ofstream写入文件时,表示字符的字节将直接写入文件,打开文件的应用程序负责将这些字节转换回字符。当您写入cout时,控制台将把字节解释为一个字符。控制台和应用程序不必就字节编码达成一致;特别是Windows控制台将坚持代码页解释,即使您更希望使用UTF-8。

最新更新