C++ ncurses 编码 (UTF-8) 问题

C++ ncurses encoding (UTF-8) troubles

当我运行编写此代码时:

#include <iostream>
#include "ncurses.h"

using namespace std;

std::string getstring()
{
    std::string input;
    nocbreak();
    echo();
    int ch = getch();
    while ( ch != '\n' )
    {
        input.push_back( ch );
        ch = getch();
    }
    return input;
}

int main() {
    setlocale(LC_ALL, "ru_RU.UTF-8");
    initscr();
    getstring();
    endwin();
    return 0;
}

然后输入 ФЫВФЫВ(俄语)终端显示:

M-Q~DM-Q~KM-PM-2M-Q~DM-Q~KM-PM-2。只有当我 运行ning ncurses 时才会出现这个问题,我的意思是如果我 运行 std::cout << "ФЫВФЫВ"; 我会看到:ФЫВФЫВ

我的locale输出:

LANG=ru_RU.UTF-8
LANGUAGE=ru
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8

Ubuntu 15.04。

我该如何解决?

尝试使用

std::wstring c;
std::getline(std::wcin,c);
std::wcout << c;

而不是

setlocale(LC_ALL, "ru_RU.UTF-8");

#include <iostream>
#include "ncurses.h"

using namespace std;

std::string getstring()
{
    std::string input;
    nocbreak();
    echo();
    int ch = getch();
    while ( ch != '\n' )
    {
        input.push_back( ch );
        ch = getch();
    }
    return input;
}

int main() {
    std::wstring c;
    std::getline(std::wcin,c);
    std::wcout << c;
    initscr();
    getstring();
    endwin();

    return 0;
}