懂 文字 的 各種編碼 Ansi UTF-8 UniCode

搞 軟體中文化 硬編碼,
常遇到 文字 長度問題,
只可以 短 不可以 長,
懂 文字 的 各種編碼 就 賊重要.

樣本 .txt
供參考 文字 長度問題.

[點擊下載]

懂 文字 的 各種編碼 Ansi UTF-8 UniCode

懂 文字 的 各種編碼 Ansi UTF-8 UniCode

懂 文字 的 各種編碼 Ansi UTF-8 UniCode
★★★ "我要留言" 不回, 只回 1 般回文. ★★★
這還真的是門學問
怕路過的網友誤會,還是補充一下好了

ANSI 一開始算是微軟的誤用
它真實的編碼隨 windows 語系的設定而有不同
CP950(來自 BIG5)、CP936(來自 GBK) 等才是實際的編碼
(可以把 ANSI 當作這些的總稱)

另外 unicode 只是定義了文字與數字(code point,又稱碼位)的對應關係
至於儲存為文字檔的位元組序列是由 UTF-8、UTF-16、UTF-32 等來決定
例如中文「好」這個字,unicode 是 597d(十六進位)
  • 用 UTF-8 會被儲存為:e5 a5 bd,共 3 個位元組
  • 用 UTF-16 會被儲存為:59 7d(BE)或 7d 59(LE),共 2 個位元組
  • 用 UTF-32 會被儲存為:00 00 59 7d(BE)或 7d 59 00 00(LE),共 4 個位元組
雖然儲存在磁碟的位元組序列不同,但他們都對應到同一個數字:597d(十六進位),這個數字在 unicode 中代表「好」

至於樓主圖片中的 UniCode 長度,實際上應該是 UTF-16 編碼後的位元組序列長度
原本 4 個英文 + 1 個空格 + 5 個中文,應該是 (4+1+5) x 2 = 20 byte
但因為有一個中文的 unicode 超過 0xffff,所以 UTF-16 會用代理對的方式處理
也就是說必須要 4 個 byte 才能表達這個字
因此才會是 22 byte

至於後面的 ANSI 長度實際用什麼編碼就不知了
只知道那個字串不論是 CP950 還是 CP936 都無法成功編碼
gnboi1 wrote:
這還真的是門學問


說的 沒毛病
★★★ "我要留言" 不回, 只回 1 般回文. ★★★
ren1244 wrote:
怕路過的網友誤會,還是補充一下好了
ANSI 一開始算是微軟的誤用
它真實的編碼隨 windows 語系的設定而有不同
CP950(來自 BIG5)、CP936(來自 GBK) 等才是實際的編碼
(可以把 ANSI 當作這些的總稱)
另外 unicode 只是定義了文字與數字(code point,又稱碼位)的對應關係
至於儲存為文字檔的位元組序列是由 UTF-8、UTF-16、UTF-32 等來決定
例如中文「好」這個字,unicode 是 597d(十六進位)
用 UTF-8 會被儲存為:e5 a5 bd,共 3 個位元組
用 UTF-16 會被儲存為:59 7d(BE)或 7d 59(LE),共 2 個位元組
用 UTF-32 會被儲存為:00 00 59 7d(BE)或 7d 59 00 00(LE),共 4 個位元組
雖然儲存在磁碟的位元組序列不同,但他們都對應到同一個數字:597d(十六進位),這個數字在 unicode 中代表「好」
至於樓主圖片中的 UniCode 長度,實際上應該是 UTF-16 編碼後的位元組序列長度
原本 4 個英文 + 1 個空格 + 5 個中文,應該是 (4+1+5) x 2 = 20 byte
但因為有一個中文的 unicode 超過 0xffff,所以 UTF-16 會用代理對的方式處理
也就是說必須要 4 個 byte 才能表達這個字
因此才會是 22 byte
至於後面的 ANSI 長度實際用什麼編碼就不知了
只知道那個字串不論是 CP950 還是 CP936 都無法成功編碼


所以 我 標題 是 ANSI 而不是 CP,
我 圖中 也有 轉 任意 CP 的 功能,
當然 不會 單純使用 CP 字眼.

UTF-8 及 UTF-16 都 不是 固定的 Bytes,
( UTF-32 賊少用 不了解 不討論)
只是 通常通常通常 UTF-8 中文 是 3 Bytes,
只是 通常通常通常 UTF-16 中文 是 2 Bytes,
程式 會去 自動取得 到底是 幾個 Bytes 並 不會去 手算.

沒對應的 中文,
對 ANSI 而言 1 個 中文字 會是 ? ? (2 個 Bytes).
★★★ "我要留言" 不回, 只回 1 般回文. ★★★
Big5 .... 古老的年代 dos
接著是 日文系統 跑遊戲用
win3.1
倚天中文系統
qemm

然後這帖意義不大,懂文字編碼要做甚麼? 現在中文化有專門的軟體
可使用,又不是早些年dos為主,得抓 碼 接著替換,長度就真的有差。
JQJQ wrote:
Big5 .... 古老的年代 dos
接著是 日文系統 跑遊戲用
win3.1
倚天中文系統
qemm
然後這帖意義不大,懂文字編碼要做甚麼? 現在中文化有專門的軟體
可使用,又不是早些年dos為主,得抓 碼 接著替換,長度就真的有差。


沒在 搞 的人,
不懂,
懶的說.
★★★ "我要留言" 不回, 只回 1 般回文. ★★★
前陣子我也被這個編碼搞到快崩潰
資料庫轉出轉入沒弄清就存檔,下次要用會直接給亂碼.....
但還是聽了懵懵懂懂
錯過了就錯過了~下一個也許會更好~ https://kangtacat.blogspot.com/
現在多數網頁採用的編碼是 UTF-8。

根據 W3Techs 等技術調查的統計,全球網站中超過 98% 的網頁使用 UTF-8 作為字元編碼,可以說它已經是現代網頁的絕對主流與標準。

為什麼 UTF-8 成為主流?
  • 支援全世界所有文字:UTF-8 是 Unicode 的一種實作方式,能表示幾乎所有語言的文字,包括中文、日文、韓文、阿拉伯文、emoji 等,不會像舊編碼那樣出現亂碼。
  • 向後相容 ASCII:UTF-8 對 ASCII 字元(英文、數字、基本符號)的編碼與傳統 ASCII 完全相同,因此舊系統與舊資料能平順移轉。
  • 網頁標準推薦:HTML5 規範建議網頁使用 UTF-8,並在中宣告:
  • 作業系統與開發工具普遍支援:現代程式語言、資料庫、編輯器與瀏覽器都預設或優先支援 UTF-8。

其他仍可能看到的編碼

雖然 UTF-8 占絕大多數,少數舊網頁或特定地區仍可能使用:
  • ISO-8859-1 / Windows-1252:早期西歐語系網頁常見。
  • Big5:台灣早期繁體中文網頁常用,現在已大幅減少。
  • GB2312 / GBK / GB18030:中國大陸早期簡體中文網頁常見。
  • Shift_JIS / EUC-JP:日本早期網頁常見。

實務建議

  • 新開發的網頁一律使用 UTF-8。
  • 在 HTML 的 最前面宣告 <meta charset="UTF-8">。
  • 伺服器回應標頭也應設定 Content-Type: text/html; charset=utf-8。
  • 檔案實際儲存編碼也要是 UTF-8,避免「宣告與實際不符」造成亂碼。
簡單說:現在做網頁,選 UTF-8 就對了。
cruiseton
ren1244 沒錯. 樓主喜歡解譯exe找字串或者改 exe檔使其可在32位元OS跑, 字串超過原長度就常常會覆蓋到字串前後的 CPU 指令了, 程式會出錯[^++^]
cruiseton
英文程式顯示字串改中文經常長度不夠, 無解
藍色深海魚 wrote:
前陣子我也被這個編碼搞到快崩潰
資料庫轉出轉入沒弄清就存檔,下次要用會直接給亂碼.....
但還是聽了懵懵懂懂


說的 沒毛病.
★★★ "我要留言" 不回, 只回 1 般回文. ★★★
文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!