私は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
場所が正しい場所である必要があります。st
tcsetattr(<IUTF8>)