2015-09-22 67 views
0

我知道字符编码就是用文本符号如英文字母等表示数据字节的方法。但是我不明白的是计算机中的编码过程发生在哪里?它发生在处理器,操作系统还是其中?字符编码是硬件问题还是软件问题?

+0

我认为** en **编码是字符 - >字节,而不是字节 - >字符。 – Downvoter

+3

处理器不知道字符,只有数字。编码既是最终用户软件又是操作系统,这就是为什么它们如此重要以至于他们都认同。 –

+1

硬件设备(如显示器和打印机)将字符编码转换为字符的可视化表示。键盘将带有字符标签的按键转换为您的电脑收到的号码。其中一些过程可能是软件辅助的。除此之外,例如,所有的电脑都是@MarkRansom指出的所有数字。 – lurker

回答

1

也许我可以把你的问题改为:什么时候把字母“A”还是字符“9”用ASCII,EBCDIC或其他编码进行编码?

答案是硬件依赖。

某些处理器有字符串指令。例如,某些(特别是订购)处理器的指令可以添加字符串“123”和“456”以获得“579”

某些硬件在屏幕上显示字符串。在这种情况下,编码是相关的。另一方面,当文本是用软件(用字体)绘制时,编码只对软件很重要。

目前大多数情况下,软件编码是一个软件问题。但是,有些地方字符编码对硬件很重要。

1

这是两种。我们来看一个小例子:你可以自己写一个非常简单的“OS”(更好的称之为内核,但即使这样也不足以满足这个存根),它不会考虑任何字符编码:

void kmain(void) { 
    volatile char * video = (volatile char *) 0xB8000; 
    *video++ = 65; // HERE 
    *video++ = 7; 
} 

当您编译并链接到一些small startup assembler代码(这也不是编码)时,并在某些x86硬件上运行该代码时,您会在左上角看到一个“A”。

这里发生的是我们将值65写入内存位置0xB8000,这是VGA图形卡(启动时处于文本模式)的内存映射到的位置。该硬件根据ASCII表格解释该值,从而决定打印“A”的形状。为什么这样做?那么,它有一些索引的内部存储器,在索引65处存储“A”的形状。这种形状已经被硬件制造商放在那里,并且可能被实现为“我在某些存储器中的字节”,我将其视为“软件”或固定的有线组件,我将其视为硬件。

在更高层次上,屏幕上显示的字符(假设您正在运行图形环境)很可能只是图形硬件的像素字段,从软件(显示驱动程序,或像pango这样的字体库)。

在另一方面,大多数打印机文本和图像之间的区别,因为他们了解字符编码(所以他们得到的价值65,而不是像素的场与像显卡的形状),并优化工作流程用于打印他们定义的字符。

这使我回到最初的说法:它既是硬件也是软件问题,因为字符编码是代码,这是一种允许不同组件(硬件或软件)相互通信的协议。

+0

代码到像素映射的真实表格是图形硬件(VGA)相关的。另外字体也可以是表格的一部分 –