如何在linux上的wstring中存储unicode字符?

时间:2015-05-17 22:48:28

标签: c++ ubuntu unicode

#include <iostream>
using namespace std;

int main() {
    std::wstring str  = L"\u00A2";
    std::wcout << str;  
    return 0;
}

这不行吗?怎么解决这个问题?

1 个答案:

答案 0 :(得分:3)

它不起作用,因为在默认的C语言环境中,没有与U + 00A2对应的字符。

如果您正在使用标准的ubuntu安装,那么您的用户区域设置很可能使用比US-ASCII更大的字符集,很可能是使用UTF-8编码的Unicode。所以你只需要切换到环境中指定的语言环境,如下所示:

#include <iostream>
/* locale is needed for std::setlocale */
#include <locale>
#include <string>

int main() {
  /* The following switches to the locale specified
   * by the LC_ALL environment variable.
   */
  std::setlocale (LC_ALL, "");
  std::wstring str  = L"\u00A2";
  std::wcout << str;  
  return 0;
}

如果您使用std::string代替std::wstringstd::cout代替std::wcout,那么您就不需要setlocale因为没有翻译需要(如果控制台需要UTF-8)。