我知道字符编码就是用文本符号如英文字母等表示数据字节的方法。但是我不明白的是计算机中的编码过程发生在哪里?它发生在处理器,操作系统还是其中?字符编码是硬件问题还是软件问题?
回答
也许我可以把你的问题改为:什么时候把字母“A”还是字符“9”用ASCII,EBCDIC或其他编码进行编码?
答案是硬件依赖。
某些处理器有字符串指令。例如,某些(特别是订购)处理器的指令可以添加字符串“123”和“456”以获得“579”
某些硬件在屏幕上显示字符串。在这种情况下,编码是相关的。另一方面,当文本是用软件(用字体)绘制时,编码只对软件很重要。
目前大多数情况下,软件编码是一个软件问题。但是,有些地方字符编码对硬件很重要。
这是两种。我们来看一个小例子:你可以自己写一个非常简单的“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
,而不是像素的场与像显卡的形状),并优化工作流程用于打印他们定义的字符。
这使我回到最初的说法:它既是硬件也是软件问题,因为字符编码是代码,这是一种允许不同组件(硬件或软件)相互通信的协议。
代码到像素映射的真实表格是图形硬件(VGA)相关的。另外字体也可以是表格的一部分 –
- 1. POS软件/硬件一般问题
- 2. 编译软件问题
- 3. 硬编码文本问题
- 4. Java邮件与MySQL:可能是字符编码问题?
- 5. mod_wsgi问题还是?
- 6. 字符编码问题
- 7. 字符串编码问题
- 8. json字符编码问题
- 9. 字符编码问题PHP
- 10. Tomcat字符编码问题
- 11. 字符编码问题
- 12. 字符串编码问题
- 13. 字符集编码问题
- 14. htaccess字符编码问题
- 15. PHP字符编码问题
- 16. .NET字符编码问题
- 17. Ruby字符编码问题
- 18. 字符编码问题 - GB2312
- 19. Python:字符编码问题
- 20. fckeditor字符编码问题
- 21. 字符编码问题?
- 22. 字符编码问题
- 23. 字符编码问题
- 24. Vi字符编码问题
- 25. 字符编码问题
- 26. 字符编码问题
- 27. JSoup字符编码问题
- 28. 字符编码问题?
- 29. 字符编码问题
- 30. iMacros字符编码问题
我认为** en **编码是字符 - >字节,而不是字节 - >字符。 – Downvoter
处理器不知道字符,只有数字。编码既是最终用户软件又是操作系统,这就是为什么它们如此重要以至于他们都认同。 –
硬件设备(如显示器和打印机)将字符编码转换为字符的可视化表示。键盘将带有字符标签的按键转换为您的电脑收到的号码。其中一些过程可能是软件辅助的。除此之外,例如,所有的电脑都是@MarkRansom指出的所有数字。 – lurker