ascii扩展字符的程序集问题

问题描述 投票:0回答:1

enter image description here

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

terminal gnome-terminal extended-ascii
1个回答
1
投票

这与汇编语言无关,而且与UTF-8(您的终端期望)相比,与ISO-8859-1(latin-1)或Windows 1252(IDK)扩展的8位字符集有关好像在寻找代码。如果您在char array[]中使用这些字节编写了一个C程序并使用了stdio puts,那将是相同的。

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

任何使write()系统调用将一个0x90字节写入stdout的程序都会做同样的事情,无论它是用什么语言编写的。(使用strace ./program查看你的工作,或将其传输到hexdump -C)。例如,在bash中运行printf '\x90\n'来做同样的事情。 90 0a不是有效的UTF-8多字节序列,因此您的终端会打印一个 字形(钻石中的一个?)。


您可以将您的gnome-terminal设置为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

© www.soinside.com 2019 - 2024. All rights reserved.