標籤:images amp 進位 規範 cte 部分 htm div 方式
目錄
一些預備知識:
在中國windows的編碼是本地編碼 , 即GBK,GB2312,GB18030等
GBK 也就是windows-986
Windows現在只支援Unicode (UTF-16),不再支援ANSI(因為各國家地區標準不統一,導致轉換不便)
android系統中的編碼,根據不同地區法律改變?
ASCIl的時候, 還不區分字元集和編碼.
字元集(char set)就是字元的集合,收錄了一定數量的字元。每個字元有對應的ID值,叫碼點(code point)。實際儲存的時候,不一定是直接儲存字串的碼點(比如,為了節約空間),要進行轉換。這個轉換規則就是編碼。
有多少個字元集呢?
名詞解析:
character encoding
code point / code position
character map 字元對應表
BOM (Byte Order Mark),位元組順序標記,出現在文字檔頭部,Unicode編碼通訊協定中用於標識檔案是採用哪種格式的編碼。
UCS 規範建議我們在傳輸位元組流前, 先傳輸字元 "Zero Width No-Break Space"。這樣如果接收者收到 FEFF,就表明這個位元組流是 Big-Endian 的;如果收到FFFE,就表明這個位元組流是 Little- Endian 的。因此字元 "Zero Width No-Break Space" (“零寬無間斷間隔”)又被稱作 BOM。
ANSI ANSI編碼
ascii gbk2312 big5 等都是ANSI的一種
不同 ANSI 編碼之間互不相容
UCS Unicode Character Set
UTF-8 UTF意為通用字集轉換格式(Universal Character Set Transformation Format)
編碼方案
UTF-7、UTF-8和UTF-16都是基於Unicode的編碼方案。
Unicode Universal Multiple-Octet Coded Character Set
範圍0-0x10FFFF : 1114112個字元 (17*65536 : 17個plane,每個plane有65536個字元)
已定義的有近十萬個字元,其中七萬多是漢字
字元集 UTF-8編碼用這個字元集,UTF-16也是用這個字元集.
MBCS(Multi-Byte Chactacter System,即多位元組字元系統) 它是編碼的一種類型,而不是某個特定編碼的名稱。
UTF-16 和 UTF-8 一樣是變長的編碼. (它們變長的"粒度"不一樣,以8位元為單位增加和以16位元為單位增加.),以此類推UTF-32 至少需要32位元表示
因為至少要二個位元組表示一個字元,所以UTF-16不相容ASCII (一個位元組)
碼位 : 可以分配給字元的數字。
UCD: Unicode字元資料庫(Unicode Character Database)
block script
Big Endian和Little Endian
utf-8沒有大小端的問題?
因為UTF-8是首碼碼,而UTF-16有這個問題.所以需要BOM標記.
命令:
locale
locale -a
問題
一篇文章能有兩種編碼嗎(比如前部分為UTF-8 , 後面為GBK18030) ? 如果這樣不衝突,編碼如何被解碼? (或者這樣表述更清楚,兩種編碼能混用嗎?)
一些工具:
查看字元的實際編碼.對應的位元據.
Linux下的工具:
locale 命令的作用範圍,例外情況( 在某個應用或路徑中使用指定的locale)
字元集:en_US.UTF-8 支援中文嗎?
en_US.UTF-8 表示的字元集和zh_CN.UTF8 都是UTF-8 , 前面的en_US 或 zh_CN只是告訴系統,你講什麼語言,在哪個地區.
UTF-8是編碼,它屬於Unicode字元集。
解碼,編碼過程?
UTF-16分為大端和小端, UTF-8呢?
UTF-8
一段二進位編碼,如何確定它是GBK還是BIG5還是UTF-16/UTF-8?
記事本的做法是在TXT檔案的最前面儲存一個標籤,如果記事本開啟一個TXT,發現這個標籤,就說明是unicode。標籤叫BOM,如果是0xFF 0xFE,是UTF16LE,如果是0xFE 0xFF則UTF16BE,如果是0xEF 0xBB 0xBF,則是UTF-8。如果沒有這三個東西,那麼就是ANSI,使用作業系統的預設語言編碼來解釋。(連結:https://www.zhihu.com/question/20650946/answer/15751688) (http://blog.csdn.net/xiongxiao/article/details/3741731)IME實現?開啟記事本,輸入一些字元,是在儲存的時候才確定編碼方式的嗎? 如果是,在儲存之前記事本中的內容用什麼術語稱呼?
活用:
自己如何設計出一種編碼?
IME設計
編碼類別型轉換:
============================================================================================================
一些可以協助理解的模型,解釋字元集等一系列相關概念的關係:
四層模型,五層模型
(其實大多數字碼頁都不需要完整的四層模型,例如GB18030以位元組為編碼單位,直接規定了位元組序列和字元的映射關係,跳過了第二層,也不需要第四層。)
"the complete model needed to describe character sets and encodings"
a character set encoding involves at least two components, a set of characters, and a system for their encoded representation in the computer.
A more complete model is actually necessary, involving four different levels of representation: the abstract character repertoire, the coded character set, the character encoding form, and the character encoding scheme.
4個
1. abstract character repertoire 抽象字元集 字元的範圍
抽象的字元層面
2. coded character set 編碼字元集 用數字表示字元 utf-8
數學意義上的字元編號
比如Unicode的某個字元的,還沒被轉換成具體的儲存內容前的號碼
3. character encoding form 字元編碼格式 用基礎資料型別 (Elementary Data Type)表示字元
程式員的視角:位元組
跟大小端無關的實際儲存
4. character encoding scheme字元編碼方案 作為位元組流的字元
二進位的實際表示:電腦中的實際儲存的位元組 (BE/LE)
UTF-16, UTF-32 等多位元組才需要這一層 大小端
(
Character set encoding basics
http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=iws-chapter03
淺談文字編碼和Unicode
http://www.fmddlmyy.cn/text16.html
http://www.fmddlmyy.cn/text16.html
A tutorial on character code issues
https://www.cs.tut.fi/~jkorpela/chars.html)
電腦群組成原理中的概念:
Fedora中顯示windows下的檔案