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

C++ ncurses encoding (UTF-8) troubles

本文关键字:问题 UTF-8 编码 C++ncurses      更新时间:2023-10-16

当我运行此代码时:

#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;
}

键入ФЫВФЫВ(俄语)终端显示:

CCD_ 2。这个问题只在我运行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;
}