2016-07-29 39 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++綁定)。 –