Suckless st는 때때로 UTF-8을 엉망으로 만듭니다.

Suckless st는 때때로 UTF-8을 엉망으로 만듭니다.

나는 Rust로 (UTF-8을 처리할 수 있는) echo 프로그램을 작성했는데, 때때로 st가 UTF-8 입력을 엉망으로 만드는 것 같습니다. alacritty 및 gnome-terminal과 같은 다양한 터미널 에뮬레이터를 사용해 보았지만 제대로 작동합니다.

이것을 재현하려면:

  • st에서 다음 Rust 코드를 실행하세요.
use std::io::BufRead;

fn main() {
    for line in std::io::stdin().lock().lines() {
        let line = line.unwrap();
        println!("{line}");
    }
}
  • "Rückgängig" 또는 영어가 아닌 문자가 포함된 기타 문자열을 입력하세요.

일정 시간이 지나면 프로그램이 실패하게 됩니다.

thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Error { kind: InvalidData, message: "stream did not contain valid UTF-8" }', src/main.rs:5:25

이 문제를 해결하는 방법이나 이런 일이 발생하는 이유를 아는 사람이 있습니까?

답변1

Backspace이 단어를 입력하는 동안 키를 눌렀을 가능성 이 있습니까?

을 누르고 cat악센트 문자가 있는 항목을 입력하고 Backspace몇 번(악센트 문자 하나 이상)을 누른 다음 를 누르세요 Enter. 같은 반응이 나오나요? 나는 아니에요.

st플래그가 설정되지 않은 것 같습니다 IUTF8. 화면의 전체 문자를 제거하더라도 UTF-8 시퀀스의 마지막 바이트만 커널의 쿠킹 모드 tty 버퍼에서 제거됩니다.

이 명령을 사용하면 문제가 해결되지만 인코딩이 UTF-8인 경우 다른 터미널 에뮬레이터처럼 해당 호출을 수행하는 stty iutf8위치가 올바른 위치여야 합니다 .sttcsetattr(<IUTF8>)

관련 정보