![Suckless st는 때때로 UTF-8을 엉망으로 만듭니다.](https://linux55.com/image/202751/Suckless%20st%EB%8A%94%20%EB%95%8C%EB%95%8C%EB%A1%9C%20UTF-8%EC%9D%84%20%EC%97%89%EB%A7%9D%EC%9C%BC%EB%A1%9C%20%EB%A7%8C%EB%93%AD%EB%8B%88%EB%8B%A4..png)
나는 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
위치가 올바른 위치여야 합니다 .st
tcsetattr(<IUTF8>)