繁体   English   中英

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

并输入ФЫВФЫВ (Russian)终端会显示:

MQ~DM-Q~KM-PM-2M-Q~DM-Q~KM-PM-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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM