使用get_wch读取Unicode字符

问题描述 投票:0回答:1

我正在用Rust编写一个ncurses应用程序。

我希望用户能够输入Unicode(UTF-8)字符。除了将它们打印到屏幕上,我还打算从这些字符中建立一个搜索字符串。

这是一个最小的例子。

use ncurses::*;

fn main() {
    initscr();
    loop {
        let input = get_wch();
        match input.unwrap() {
            WchResult::Char(ch) => { 
                match ch {
                    27 => break,
                    _ => { mvaddstr(0, 0, &format!("spam {}", ch)); }
                }
            },
            WchResult::KeyCode(code) => { mvaddstr(0, 0, &format!("eggs {}", code)); }
        }
    }
    endwin();
}

我被告知如果我想读取UTF-8字符,我应该使用... ... get_wch()但当我输入 ć,打印的是 ~G. 对于ASCII字符,它打印的是 spam <ch>.

如何在ncurses应用程序中正确处理Unicode?

rust ncurses
1个回答
0
投票

请看这里。https:/github.comjeayencurses-rsblobmasterexamplesex_7.rs.

get_wchar()可以得到一个单一的宽字符,也就是一个存储在i32中的Unicode Scalar Value。Unicode Scalar Value就是Unicode语境中常说的 "字符"。UTF-8将每个 "字符 "编码成1到4个Bytes。对应的Rust类型是char。要转换它,你应该将其转换为u32,并使用 char::from_u32() 方法。这将为您返回一个Option(因为并非所有的u32值都是有效的Unicode Scalar值)。在解包之后,char的Display特性现在应该把它编码成UTF-8,并把它放到输出流中。

© www.soinside.com 2019 - 2024. All rights reserved.