Jos*_*osh 9 c++ windows unicode stl c++-standard-library
Windows API看起来很重要UNICODE,您在Visual C++中创建了一个新项目,UNICODE默认情况下将其设置为.
我想成为一名优秀的Windows程序员,我想使用它UNICODE.
问题是C++标准库和STL(例如std :: string或std :: runtime_error)不能很好地处理UNICODE字符串.我只能传递std :: string,或者传递char*给std :: runtime_error,我很确定std :: string不支持UNICODE.
所以我的问题是,我应该如何使用诸如std :: runtime_error之类的东西?我应该UNICODE和常规混合ANSI吗?(我认为这是一个坏主意......)
只是ANSI在我的整个项目中使用?(不喜欢..)或者什么?
一般来说,你不应该混合这两种编码.但是,异常消息只是开发人员感兴趣的东西(例如在日志文件中),并且永远不应该向用户显示(但请注意Jim的评论中的一个重要警告).
因此,如果您使用UNICODE整个面向用户的界面并且仍然std::exception在幕后使用开发人员消息,那么您就安全了.应该没有必要在两者之间进行转换.
此外,在C++中定义typedeffor UNICODE-independent字符串是一个很好的技巧:
typedef std::basic_string<TCHAR> tstring;
Run Code Online (Sandbox Code Playgroud)
...和类似定义tcout,tcin等有条件的:
#ifdef UNICODE
std::wostream& tcout = std::wcout;
std::wostream& tcerr = std::wcerr;
std::wostream& tclog = std::wclog;
std::wistream& tcin = std::wcin;
#else
std::ostream& tcout = std::cout;
std::ostream& tcerr = std::cerr;
std::ostream& tclog = std::clog;
std::istream& tcin = std::cin;
#endif
Run Code Online (Sandbox Code Playgroud)