我知道字符編碼就是用文本符號如英文字母等表示數據字節的方法。但是我不明白的是計算機中的編碼過程發生在哪裏?它發生在處理器,操作系統還是其中?字符編碼是硬件問題還是軟件問題?
回答
也許我可以把你的問題改爲:什麼時候把字母「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