首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

字元編碼研究:C# 實作探索 (一) ASCII、非 ASCII、Unicode 基礎

     編輯:關於C語言

一、ASCII 碼

電腦內部以二進位儲存資訊。8 位元組成 1 位元組,可表示 256 種狀態。ASCII 碼規定 128 個字元編碼(含 32 個控制字元),佔用位元組低 7 位,最高位固定為 0。例如:空格 32 (00100000)、大寫 A 65 (01000001)。

C# 查看 ASCII 碼:

string s = "a";
byte[] ascii = Encoding.ASCII.GetBytes(s);  // ascii[0] = 97 (1100001)

二、非 ASCII 編碼

歐洲語言需更多符號,利用最高位擴充至 256 個字元。但不同國家對 128-255 的定義不同(如 130 在法文為 é,希伯來文為 Gimel,俄文為另一符號)。0-127 相同。

亞洲文字符號更多,需多位元組。簡體中文常用 GB2312,雙位元組表示漢字,理論上 65536 字元。C# 查看 GB2312:

string s = "梁";
Encoding gb2312 = Encoding.GetEncoding("GB2312");
byte[] gb = gb2312.GetBytes(s);  // gb = [193, 186]

三、Unicode

Unicode 為全球所有符號指定唯一編碼,解決亂碼問題。現可容納 100 萬+ 符號。C# 查看 Unicode(UTF-16 小端序):

string s = "梁";
byte[] unicode = Encoding.Unicode.GetBytes(s);  // unicode = [129, 104] (對應 U+6881)

四、Unicode 儲存問題

Unicode 只定碼位,未定儲存方式。問題:

  1. 如何區分 Unicode 與 ASCII?電腦怎知 3 位元組是 1 字元而非 3 字元?
  2. 英文字母只需 1 位元組,若統一用 3-4 位元組儲存,空間浪費 2-3 倍。

結果:出現多種 Unicode 儲存格式(UTF-8、UTF-16、UTF-32 等),Unicode 推廣受阻直至網際網路普及。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved