Я использую SCIM в Linux для ввода китайского и японского языков. К сожалению, когда я пытаюсь захватить ввод с помощью Perl STDIN, ввод сходит с ума. При вводе латинских символов SCIM пытается угадать правильные конечные символы.
^ H (backspace) коды используются для удаления ранее предложенных символов в командной строке. (По мере ввода SCIM пытается угадать окончательные азиатские символы и отображает их.) Однако эти символы возврата на задний план отображаются буквально как ^ H и интерпретируются неправильно.
Пример одной строки:
perl -e 'print "Chinese: "; my $s = <STDIN>; print $s'
Когда я включаю ввод SCIM на китайском или японском языке, когда я печатаю, например, nihao => 你好, вот результат:
你 ^ Н ^ Н 你 你 ^ Н ^ Н 你 你 ^ Н 你好 ^ Н ^ Н 你好 ^ Н ^ Н 你好 ^ Н ^ Н 你 哈 ^ Н ^ Н 你 哈 ^ Н ^ Н 你 哈^ H ^ H 你好 ^ H ^ H 你好 ^ H ^ H 你好 ^ H ^ H 你好
В самом конце этой строки вы можете увидеть «你好» (nihao / hello).
При обычной подсказке bash, если я наберу nihao (с включенным китайским), результат будет идеальным.
Это как-то связано с интерпретацией символов возврата (или контрольных символов) во время STDIN в Perl. То же самое происходит при использовании команды 'read' в Bash.
Свидетель: read -p 'Chinese: ' s && echo $s