gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:23:22 25 4
gpt4 key购买 nike

当我运行这段代码时:

#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 .只有当我运行 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;
}

关于C++ ncurses 编码 (UTF-8) 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34187766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com