使用std :: string,cout,ofstream和socket的字符集

时间:2012-08-01 20:49:05

标签: c++ string character-encoding stream

我正在尝试通过包含ASCII表之外的“á”等字符的Windows套接字连接发送字符串。当我尝试这样的事情时,我听到垃圾出现了另一端:

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

所以我开始调查,我发现需要使用像UTF8这样的东西进行编码。虽然我仍然在寻找一种在C ++中执行此操作的简单方法,但我对我注意到的流行为有疑问:

std::ofstream << message如何正确输出á,而cout << message会输出垃圾? 2之间有什么区别?在插座上发送这些字符时,我可以使用这个吗?

1 个答案:

答案 0 :(得分:0)

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