从键盘读取 UTF-8 编码的字符
Read UTF-8 encoded character from keyboard in ncurses
在nCurses中读取键盘输入时,我使用getch()函数,该函数适用于ASCII字符,但对于UTF-8编码字符无效。如果我在键盘上按字符ś:
int c = getch();
c 的值应为十六进制:0xC59B。但是当我尝试打印它的值时,我只得到0xC5。
我如何读取整个字符并且 getch() 是正确的函数?
getch
读取字节,但UTF-8是多字节的。 你可以逐字节阅读并解释它,但这是大多数人不需要的工作。 使用get_wch
读取(整个)宽字符。
这假设您已经初始化了 ncurses 的语言环境:
setlocale(LC_ALL, "");
(如果你不这样做,getch
无论如何都不会返回正确的字节)。
>getch
的名字来自旧地球的"字符"含义,实际上只是"字节"。此机制无法理解多字节编码。
但是,它仍然是正确的功能;您只需要正确处理其结果。重复调用它并将您获得的内容转储到一串字节中(在您的特定示例中,您需要两次调用才能获得足够的字节来表示提供的特定 Unicode 字符),然后使用 UTF-8 库解释这些字节。
不要忘记过滤掉getch
可以提供的"特殊值",因为它并不总是为您提供原始字符(例如考虑 F1 键!
相关文章:
- 是否有任何区域设置会影响宽字符编码?
- 字符编码和带有C++的文件名
- C 14:UTF-8/UTF-16与本机字符编码之间的转换
- 如何获取 json 文件的字符编码类型
- 字符编码的自动分配
- 如何正确确定文本文件的字符编码
- 是什么决定了C++中的字符编码
- HttpFile::SendRequest和字符编码
- 从 Linux 到 Windows 交叉编译时,我应该如何处理字符编码
- 如何检查在运行程序的控制台上设置了哪些字符编码
- 在c++中转换字符编码
- 标准::字符串字符编码
- Boost:如何检查文本文件字符编码/字符集
- 流级别的字符编码
- 文件字符编码
- 字符编码独立字符交换
- cURL post字段是用特殊字符编码的
- c++是否支持除UTF-8、UTF-16和UTF-32以外的字符编码之间的转换?
- 字符编码-当读取超过127个ASCII值时,C++cin失败
- gettext字符编码