< 返回版块

SmileXie 发表于 2022-10-24 19:58

Tags:rust,ncurses

这是我的代码,想用ncurses::addstr输出一串中英混合的字符串

    log::debug!("row str {}", row_str);
    ncurses::addstr(&row_str);

变量row_str中的中文可以被log::debug正确打印出来, 但在使用ncurses::addstr时输出了乱码。

我已经尝试了以下三种方式来修复,但没有哪个能行得通。

    // method 1
    gettextrs::setlocale(gettextrs::LocaleCategory::LcAll, "");
    // method 2
    use libc::setlocale;
    unsafe {
        setlocale(0, "".as_bytes().as_ptr() as *const i8);
    }
    //method 3
    ncurses::setlocale(ncurses::constants::LcCategory::all, "")

谢谢

评论区

写评论
ziyouwa 2022-11-01 10:35

先用local命令看看你系统的设置。systemd的话一般用命令设置:localectl set-locale zh_CN.UTF-8。然后locale命令看到的是zh_CN.utf8。其实前面是什么都行,关键是字符集一定是UTF-8,就OK了。

作者 SmileXie 2022-10-25 16:44

写了个测试程序如下:


extern crate ncurses;
use ncurses::*;

fn main()
{
    
  let locale_conf = LcCategory::all;
  setlocale(locale_conf, "zh_CN.UTF-8"); 

  initscr();

  addstr("Hello, world!\n");

  addstr("测试中文");

  refresh();

  getch();

  endwin();

}

显示结果是:

Hello, world!
派K设U中彖~G

这个官方的example(https://github.com/jeaye/ncurses-rs/blob/master/examples/ex_1.rs)基本一样了,还是乱码。

--
👇
chirsz-ever: Linux 的 locale 设置成 zh_CN.UTF-8 的话一般没问题啊,能截图看看乱码吗

gorust21 2022-10-25 11:43

先看看系统环境

chirsz-ever 2022-10-24 21:17

Linux 的 locale 设置成 zh_CN.UTF-8 的话一般没问题啊,能截图看看乱码吗

作者 SmileXie 2022-10-24 21:12

是在linux环境下

--
👇
chirsz-ever: 请问这是在什么环境下?Windows,Linux 还是 Mac?

chirsz-ever 2022-10-24 21:05

请问这是在什么环境下?Windows,Linux 还是 Mac?

1 共 6 条评论, 1 页