ASCII扩展字符的汇编问题

时间:2018-09-04 20:54:34

标签: terminal gnome-terminal extended-ascii

enter image description here

我想知道用ascii扩展字符解决此问题的方法,我不明白为什么打印一个奇怪的符号而不是代表0x90的字母 我把PutStr c381 什么都没发生 enter image description here

1 个答案:

答案 0 :(得分:1)

这与汇编语言无关,与UTF-8(终端所期望的)与ISO-8859-1(拉丁语1)或Windows 1252(IDK)扩展的8位字符无关设置您似乎从中查找代码的位置。如果您使用char array[]中的那些字节编写了一个C程序并使用了stdio puts,那将是相同的。

正如@Fuz所说,“Á没有ASCII码。” ASCII仅包含来自0..127的字符(低32个字符不可打印)http://www.asciitable.com/ 扩展 -ASCII 8位字符集与0到127的代码点仅与UTF-8重叠。

任何进行write()系统调用以将0x90字节写入stdout的程序都将执行相同的操作,而不管它是用哪种语言编写的。(使用strace ./program查看怎么做,或将其传送到hexdump -C中)。例如,在bash中运行printf '\x90\n'以执行完全相同的操作。 90 0a不是有效的UTF-8多字节序列,因此您的终端会打印一个字形(菱形中的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之类的编辑器。