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数回(アクセント文字を1つ以上)を押してから、を押しますEnter。同じ反応が出ますか?私はそうではありません。

stフラグが設定されていないようですIUTF8。画面の文字全体を削除しても、UTF-8シーケンスの最後のバイトだけがカーネルのクッキングモードttyバッファから削除されます。

このコマンドを使用すると問題は解決しますが、エンコーディングがUTF-8の場合は、他の端末エミュレータと同様にその呼び出しを実行するstty iutf8場所が正しい場所である必要があります。sttcsetattr(<IUTF8>)

関連情報