Intereting Posts
Как вставить конкретные строки в файл с помощью vim? автоматизировать заголовок экранных окон gnu Является ли ловушка унаследована подоболочкой? Как указать U-Boot не использовать uramdisk Лицензия GNOME не принимается при перезагрузке системы Как получить Gluon SceneBuilder, работающий с Fedora 25? tmux status-bar поврежден после обращения к двоичному файлу, как сбросить? Клиент электронной почты в Linux, который позволяет искать зашифрованную почту Каталог mv и содержимое в новый каталог Аэропорт Extreme BCM4331 не признан на FreeBSD Объедините несколько текстовых файлов в один со следующей строкой для каждого файла Как создать каталог, который будет иметь доступ к пользователю, который устанавливает пакет? отображение неправильных строк в консоли ssh Доступ к файловой системе iPhone через Linux / Unix Как ядро ​​Linux узнает, какой процесс просыпаться во время обработки прерываний?

backspace не работает при запуске c ++-программы

Всякий раз, когда я использую ./a.out для запуска ac / c ++-программы в bash, я не могу отступать при вводе ввода. Вместо этого я получил коробку с вопросительным знаком.

Коробка с вопросительным знаком звучит как символ замены Юникода. Это может отображаться в этой ситуации:

  • терминал использует кодировку UTF-8,
  • кто-то набрал многобайтовый символ, используя кодировку UTF-8,
  • используется обратное (или любое другое его) выражение, но
  • только часть символа, т. е. последний байт удаляется драйвером терминала и
  • терминал, запрошенный (повторный) дисплей, имеет только неполный символ, и
  • показывает символ замены:

Символ Unicode «ЗАМЕНА ХАРАКТЕРА» (U + FFFD)

Хотя ядро ​​Linux поддерживало флаг iutf8 течение нескольких лет, это не стандартизировано и, как правило, недоступно в других системах (кстати, у OSX есть это ). Также (даже если поддерживается) есть вероятность, что он отключен.

Дальнейшее чтение:

  • UTF-8 и Unicode FAQ для Unix / Linux :

Драйвер tty любой системы POSIX поддерживает «приготовленный» режим, в котором доступны некоторые примитивные функции редактирования строк. Чтобы разрешить функцию стирания символов (которая активируется при нажатии на обратное пространство) для правильной работы с UTF-8, кому-то нужно сказать, что это не считать байты продолжения в диапазоне 0x80-0xBF в качестве символов, но для их удаления в качестве части многобайтовой последовательности UTF-8. Поскольку ядро ​​не знает о механике libc locale, необходим другой механизм, чтобы сообщить драйверу tty о используемом UTF-8. Ядро Linux версии 2.6 или новее поддерживает бит IUTF8 в c_iflag члена c_iflag struct termios. Если он установлен, редактор строк в режиме «приготовленного» будет правильно обрабатывать многобайтовые последовательности UTF-8. Этот режим можно установить из командной оболочки с помощью «stty iutf8» . Xterm и друзья должны устанавливать этот бит автоматически при вызове в локали UTF-8.

  • Backspace через SSH удаляет только последний байт символов (без обработки IUTF8, требуется работа по стандартизации)
  • Backspace на символах UTF-8 удаляет только один байт

Это ожидаемое поведение.

Клавиша Backspace не предназначена для удаления, а для возврата.

Если вы хотите удалить символы, используйте клавишу DEL .