Проблемы сборки с расширенными символами ascii
1 ответ
Это не имеет ничего общего с языком ассемблера и все, что связано с UTF-8 (который ожидает ваш терминал) по сравнению с расширенным 8-битным набором символов ISO-8859-1 (латиница-1) или Windows 1252 (IDK, который) кажется, ищет коды от. Было бы то же самое, если бы вы написали программу на C с этими байтами в char array[]
и использовал stdio puts
,
Как говорит @Fuz: "У А нет кода ASCII". ASCII включает в себя только символы от 0.127 (а нижние 32 не для печати) http://www.asciitable.com/. Расширенные8-битные наборы -ASCII перекрываются только с UTF-8 для кодовых точек от 0 до 127.
Любая программа, которая делает write()
системный вызов, чтобы написать 0x90
Байт в стандартный вывод будет делать то же самое, независимо от того, на каком языке он был написан. (Используйте strace ./program
чтобы увидеть, что твое делает, или направить hexdump -C
). Например, в bash run printf '\x90\n'
делать то же самое. 90 0a
не является допустимой многобайтовой последовательностью UTF-8, поэтому ваш терминал печатает символ a (a? в ромбах).
Вы можете установить свой gnome-терминал на ISO-8859-1 или Windows 1252 (щелкните правой кнопкой мыши и используйте раскрывающийся список или найдите пункт меню). я использую konsole
и он поддерживает обе эти кодировки не-UTF-8.
Вы, вероятно, захотите установить export LANG=en_US
только в этом терминале (не обычный en_US.UTF-8
), если вы это сделаете, другие программы будут продолжать работать хорошо.
Или же en_CA
или какую бы локаль вы на самом деле ни использовали, просто используйте версию не-UTF-8, чтобы man
рисование линий будет работать, и так будет полноэкранные текстовые вещи, такие как gdb
TUI layout reg
режим или редакторы, как jed
,