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;
}
当我运行编写此代码时:
#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;
}