2015-09-22 111 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)相關的。另外字體也可以是表格的一部分 –