【问题标题】:How to use get UTF-8 accents with ncurses如何在 ncurses 中使用获取 UTF-8 重音符号
【发布时间】:2016-07-29 10:19:09
【问题描述】:

我最近安装了新的 Windows 10 build 14393,我想使用新的 linux 子系统。所以我决定学习ncurses,但我找不到如何从getch 获得带有è 之类的重音字符的UTF-8 代码。 所以这是我的代码:

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

例如,如果我按è,它会给我两个字符代码,即-61-88,那么我如何从UTF-8 表中获得它的代码232? 我使用 ncursesw,这是我要编译的 g++ 命令:

g++ file.cxx -o file -lncursesw

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

【问题讨论】:

  • long story,简而言之 utf8 将不同的代码点编码为 1 个或多个字节的序列。

标签: c++ utf-8 ncurses


【解决方案1】:

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

要获取 Unicode(宽字符)值,请使用 get_wch,例如,

wchar_t ch;
get_wch(&ch);

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

【讨论】:

  • 当我编译它说我get_wch was not declared in this scope。我需要包含另一个头文件吗?
  • 好吧,我发现我必须#include &lt;ncursesw/cursesw.h&gt;。非常感谢你。 :)
  • 我想你的意思是&lt;ncursesw/curses.h&gt;(另一个是用于C++绑定)。
  • 我正在使用 C++。 ;-)
  • 我忘记了 包含 ,因为前者定义了您不使用的方法。不过,它会起作用......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-12
  • 2016-10-14
  • 1970-01-01
  • 1970-01-01
  • 2017-10-18
  • 2015-01-17
  • 2015-08-28
相关资源
最近更新 更多