я хочу знать, что делать, чтобы решить эту проблему с расширенными символами ascii, я не понимаю, почему вместо буквы, представляющей 0x90, печатаются странные символы, я поставил PutStr c381, ничего не происходит
Проблемы сборки с расширенными символами ascii
Ответы (1)
Это не имеет ничего общего с языком ассемблера и все, что связано с UTF-8 (которую ожидает ваш терминал) по сравнению с ISO-8859-1 (latin-1) или Windows 1252 (IDK который) расширенный 8-битный набор символов, который вы кажется, ищет коды из. Это было бы то же самое, если бы вы написали программу на C с этими байтами в char array[]
и использовали stdio puts
.
Как говорит @Fuz, «Á не имеет кода ASCII». ASCII включает только символы от 0 до 127 (младшие 32 не печатаются) http://www.asciitable.com/. Extended-ASCII 8-битные наборы символов перекрываются с UTF-8 только для кодовых точек от 0 до 127.
Любая программа, которая выполняет системный вызов write()
для записи 0x90
байта в стандартный вывод, будет делать то же самое, независимо от того, на каком языке она была написана. Например, в bash запустите printf '\x90\n'
, чтобы сделать то же самое. 90 0a
не является допустимой многобайтовой последовательностью UTF-8, поэтому ваш терминал печатает символ � (знак ? в ромбе).
Вы можете настроить свой терминал gnome на ISO-8859-1 или Windows 1252 (щелкните правой кнопкой мыши и используйте раскрывающийся список или найдите пункт меню). Я использую konsole
, и он поддерживает обе эти кодировки символов, отличные от UTF-8.
Вы, вероятно, захотите установить export LANG=en_US
только в этом терминале (не обычное en_US.UTF-8
), если вы это сделаете, чтобы другие программы продолжали работать хорошо.
Или en_CA
, или любую другую локаль, которую вы на самом деле используете, просто используйте ее версию, отличную от UTF-8, чтобы работало рисование линий man
, а также полноэкранные текстовые вещи, такие как режим TUI layout reg
gdb
, или редакторы, такие как jed
.
db 'ščije'
. (если вы проверите полученный машинный код - например, используйте опцию listing-file с nasmnasm -l <listing_file.lst>
- UTF8 - это многобайтовая кодировка с переменным размером байта для каждого символа, поэтому некоторые символы будут собраны как несколько байтов). - person Ped7g   schedule 05.09.2018db
или подобных... тогда вызов APIPutStr
должен поддерживать целевую кодировку, а сам терминал должен поддерживать целевую кодировку, а шрифт вашего терминала должен содержать запрошенные символы.. если все подходит, вы должен увидеть правильный символ) - person Ped7g   schedule 05.09.2018write()
системный вызов для записи0x90
байта в стандартный вывод, сделает то же самое. (Используйтеstrace ./program
, чтобы посмотреть, что он делает, или передайте его вhexdump -C
). Например, в bash запуститеprintf '\x90\n'
, чтобы сделать то же самое.90 0a
не является допустимой многобайтовой последовательностью UTF-8, поэтому ваш терминал печатает глиф�
(?
в ромбе). - person Peter Cordes   schedule 05.09.2018c3 81
должна работать. Если это не так, покажите нам свой код, чтобы мы могли сказать вам, в чем проблема. - person fuz   schedule 05.09.2018char array[]
и использовали stdioputs
. Кроме того, я понимаю, что вам нужно показать скриншоты, чтобы проиллюстрировать, какой глиф напечатал ваш терминал, но скриншоты всего вашего рабочего стола бесполезны. Поместите код в форматирование кода. См. idownvotedbecau.se/imagesofcode. - person Peter Cordes   schedule 05.09.2018LANG=en_US
только в этом терминале (неen_US.UTF-8
), если вы это сделаете, чтобы другие программы продолжали работать хорошо. - person Peter Cordes   schedule 05.09.2018{}
или нажмите Ctrl-k, чтобы сделать отступ на 4 столбца. idownvotedbecau.se/imagesofcode даже содержит ссылку на stackoverflow.com/help/formatting, который объясняет это. - person Peter Cordes   schedule 05.09.2018