2016-07-29 34 views
1

我最近安装了新的Windows 10构建14393,我想使用新的Linux子系统。所以我决定学习ncurses,并且我找不到如何从getch那里获得口音像è这样的字符的UTF-8代码。 因此,这里是我的代码:如何使用获得UTF-8口音与ncurses

#include <iostream> 
#include <string> 
#include <curses.h> 

using namespace std; 

int main(int argc, char **argv) 
{ 
    char ch; 

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

    initscr(); 
    cbreak(); 
    noecho(); 

    printw("èèè\n"); // i can print accents 

    ch = getch(); // if i press è it gives me 2 characters 
    printw("%d", ch); 
    ch = getch(); 
    printw("%d", ch); 

    getch(); // wait for a key to exit 
    endwin(); 

    return 0; 
} 

例如,如果我按è它给了我2个字符代码是-61-88,所以,我怎么能有从UTF-8表是232其代码? 我用ncursesw这里是我g++命令编译:

g++ file.cxx -o file -lncursesw 

我的语言环境配置为fr_FR.UTF-8。 感谢您的任何答案。

+0

[long story](http://www.unicode.org/reports/tr17/),简而言之,utf8将不同的代码点编码为1个或多个字节的序列。 –

回答

0

getch()调用返回32位chtype值中的8位字符(char将无法​​正常工作,但在这种情况下不是问题)。 UTF-8是一个字节编码,在这种情况下,每次调用ncurses将返回一个字节—。

为了得到一个Unicode(宽字符)值,使用get_wch,例如,

wchar_t ch; 
get_wch(&ch); 

你当然应该检查get_wch的返回值,但它的返回值将是OKERR —通过作为参数传递的指针返回字符。

+0

当我编译它说我'get_wch没有在这个范围内声明'。我是否需要包含另一个头文件? – Aistun

+0

好吧,我发现我不得不'#include '。非常感谢你。 :) – Aistun

+0

我想你的意思是''(另一个用于C++绑定)。 –