計算機程序設計

UTF-8 - 字符編碼

Unicode支持幾乎所有現有的字符集。 Unicode字符集的最佳編碼是UTF-8編碼。 它提供與ASCII的兼容性,抵抗數據損壞,效率和易於處理。 但關於一切順序。

編碼形式

計算機的操作數字不僅僅是抽象的數學對象,而是作為固定大小信息字節和32位字的存儲和處理單元的組合。 當確定 字符 由 數字 表示的方式時,編碼標準必須考慮到這一點 。

在計算機系統中,整數存儲在8位(1字節),16位或32位的存儲單元中。 每個Unicode編碼形式確定哪個存儲器單元的序列表示與特定字符相對應的整數。 該標準提供了三種不同形式的Unicode字符編碼:8,16和32位塊。 因此,它們被稱為UTF-8,UTF-16和UTF-32。 UTF的名稱代表Unicode轉換格式。 編碼的三種形式中的每一種是表示Unicode字符的相同方式,在各種應用中具有優勢。

這些編碼可用於表示Unicode標準的所有字符。 因此,使用不同形式的編碼,它們可以通過不同的原因完全兼容解決方案。 每個編碼可以被唯一地轉換成其他兩個,而不會丟失數據。

非強制性原則

每個Unicode編碼表單被設計為考慮到部分重疊的不允許性。 例如,Windows-932從一個或兩個字節的代碼生成字符。 序列的長度取決於第一個字節,所以兩個字節和一個字節序列中的前導字節值不相交。 但是,單個字節和序列的結束字節的值可能相同。 這意味著,例如,當搜索字符D(代碼44)時,您可能會錯誤地找到它進入字符“D”的兩個字節的序列的第二部分(代碼84 44)。 要確定哪個順序是正確的,程序必須考慮到以前的字節。

如果主和結束字節匹配,情況會變得更加複雜。 這意味著為了反轉歧義,將執行反向搜索,直到文本的開頭或明確的代碼序列。 這不僅效率不高,而且還不能防止可能的錯誤,因為一個壞字節足以使整個文本不可讀。

Unicode轉換格式避免了這個問題,因為前導,尾隨和單個信息存儲單元的值不匹配。 因此,所有Unicode編碼都適用於搜索和比較,由於字符代碼的不同部分的一致性,不會給出錯誤的結果。 這些編碼形式符合非賦值原則將其與其他多字節東亞編碼區分開來。

Unicode編碼的另一個方面是每個字符都有明確界定。 這消除了掃描未確定數量的前一個字符的需要。 編碼的這個特徵有時被稱為自同步。 一個單位代碼的失真將導致僅一個字符的失真,並且周圍的符號保持不變。 在8位轉換格式中,如果指針指向以10xxxxxx(二進制編碼)開始的字節,則需要一到三個反向轉換來查找字符的開頭。

一致性

Unicode Consortium完全支持所有3種編碼格式。 重要的是不要反對UTF-8和Unicode,因為所有的轉換格式都是同樣合法的Unicode字符編碼格式。

字節取向

要表示UTF-32符號,您需要一個與Unicode代碼匹配的32位代碼單位。 UTF-16 - 從一個到兩個16位單位。 而UTF-8最多可以使用4個字節。

UTF-8的編碼旨在與基於ASCII的面向字節目的系統兼容。 大多數現有的軟件和信息技術實踐已經很長一段時間依賴於以字節序列的形式表示符號。 許多協議依賴於ASCII編碼的不變性,並且使用或避免特殊的控製字符。 將Unicode適應於這種情況的一種簡單方法是使用8位編碼來表示與任何ASCII字符或控製字符相當的Unicode字符。 為此,希望使用UTF-8編碼。

可變長度

UTF-8是由8位信息存儲單元組成的可變長度編碼,其高位表示每個單字節所屬序列的哪一部分。 為代碼序列的第一個元素保留一個值範圍,另一個值用於後續元素。 這確保了不相交的編碼。

ASCII

UTF-8編碼完全支持ASCII碼(0x00-0x7F)。 這意味著Unicode字符U + 0000-U + 007F被轉換為單字節0x00-0x7F UTF-8,因此與ASCII不可區分。 此外,為了避免歧義,在Unicode字符表示的任何字節中,值0x00-0x7F不再被使用。 為了編碼除ASCII以外的非表意符號,使用兩個字節的序列。 範圍U + 0800-U + FFFF的符號由三個字節表示,而代碼大於U + FFFF的附加符號需要四個字節。

適用範圍

UTF-8的編碼通常優先於HTML協議,與之類似。

XML成為第一個具有完整UTF-8編碼支持的標準。 參與標準化的組織也推薦它。 當W3C聯盟和IETF工程組同意以UTF-8專門編碼所有 URL 時,解決了支持ASCII字符以外的URL地址的問題。

與ASCII的兼容性有助於過渡到新的軟件。 使用UTF-8,大多數文本編輯器都可以工作,包括Windows操作系統的JEdit,Emacs,BBEdit,Eclipse和Notepad。 沒有其他形式的Unicode編碼可以誇耀這種工具的支持。

編碼的優點是它由一系列字節組成。 使用UTF-8字符串,它很容易在C和其他編程語言中工作。 這是編碼的唯一形式,不需要在XML中標記BOM字節或編碼聲明的順序。

自同步

在使用8位字符處理的環境中,與其他多字節編碼相比,UTF-8具有以下優點:

  • 代碼序列的第一個字節包含有關其長度的信息。 這提高了直接搜索的效率。
  • 簡化為找到字符的開頭,因為初始字節被限制在固定的值範圍內。
  • 沒有字節值的交集。

比較優勢

UTF-8編碼緊湊。 但是,當使用中文字符(中文,日文,韓文,使用漢字)進行編碼時,使用3字節序列。 UTF-8編碼的處理速度也不如其他形式的編碼。 二進製字符串排序產生與Unicode二進制排序相同的結果。

字符編碼方案

字符編碼方案由字符編碼形式和代碼單元逐像素排列的方法組成。 為了通過Unicode標準確定編碼方案,提供了使用初始字節順序標記(BOM,字節順序標記)。

當您以UTF-8打開BOM時,標籤的功能僅受指示使用編碼格式的限制。 確定UTF-8中字節順序的問題不是,因為它的編碼單元大小是一個字節。 對於此編碼表單使用BOM既不是強制性的也不推薦。 BOM可以發生在從使用字節順序標記的其他編碼或UTF-8編碼簽名轉換的文本中。 它是3個字節的序列EF 16 BB 16 BF 16

如何設置UTF-8編碼

在 HTML中, 使用以下代碼設置UTF-8 編碼 :

˂metahttp-equiv =“Content-Type”content =“text / html; charset = utf-8”˃

在PHP中,在設置錯誤輸出級別的值之後,使用頭文件()函數在文件的最前面指定UTF-8編碼:

˂?Php

Error_reporting(-1);

標題('Content-Type:text / html; charset = utf-8');

要連接到MySQL數據庫,UTF-8的編碼設置如下:

˂?Php

Mysql_set_charset('utf8');

在CSS文件中,UTF-8字符編碼規定如下:

@charset“utf-8”;

當保存所有類型的文件時,選擇沒有BOM的UTF-8編碼,否則該站點將不起作用。 為此,在DreamWeave程序中,選擇菜單項“修改 - 頁面屬性 - 標題/編碼”,將編碼更改為UTF-8。 然後您應該重新加載頁面,取消選中“連接Unicode簽名(BOM)”框並應用更改。 如果通過另一種形式的編碼輸入了頁面或數據庫中的任何文本,則必須重新輸入或重新編碼。 使用正則表達式時,必須使用u修飾符。

您還可以在Windows記事本中將文件保存為UTF-8編碼。 選擇菜單項“文件 - 另存為...”後,設置必要的編碼格式,並以UTF-8編碼格式保存文件。

在Notepad ++文本編輯器中,如果編碼與UTF-8不同,請更改編碼,並通過菜單項“轉換為UTF-8無BOM”將其保存為UTF-8編碼。

沒有別的選擇

在全球化的背景下,當政治和語言邊界模糊時,具有地方特徵的字符集變得不那麼有用。 Unicode是唯一支持所有本地化的字符集。 而UTF-8就是正確實現Unicode的一個例子,其中:

  • 支持各種工具,包括與ASCII編碼的兼容性;
  • 有抗拒數據的腐敗;
  • 加工方便快捷;
  • 不依賴於平台。

隨著UTF-8的出現,關於哪種形式的編碼或字符集更好的討論變得沒有意義。

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 zhtw.birmiss.com. Theme powered by WordPress.