QT乱码总结1.Unicode 和 UTF-8
QT亂碼總結(jié)0.Qt亂碼產(chǎn)生因素
https://blog.csdn.net/liujiayu2/article/details/103167953
QT亂碼總結(jié)1.Unicode 和 UTF-8
https://blog.csdn.net/liujiayu2/article/details/103168020
QT亂碼總結(jié)2.gbk和ANSI和gb2312的區(qū)別
https://blog.csdn.net/liujiayu2/article/details/103168168
QT亂碼總結(jié)3.UNICODE有無BOM
https://blog.csdn.net/liujiayu2/article/details/103168236
QT亂碼總結(jié)4.細(xì)談本地編碼
https://blog.csdn.net/liujiayu2/article/details/103168249
QT亂碼總結(jié)5.萬能解決方案
https://blog.csdn.net/liujiayu2/article/details/103168272
QT亂碼總結(jié)6.編碼測試和總結(jié)一
https://blog.csdn.net/liujiayu2/article/details/103168289
QT亂碼總結(jié)7.編碼測試和總結(jié)二
https://blog.csdn.net/liujiayu2/article/details/103168301
QT亂碼總結(jié)8.編碼測試和總結(jié)三
https://blog.csdn.net/liujiayu2/article/details/103168307
QT亂碼總結(jié)9.編碼測試和總結(jié)四
https://blog.csdn.net/liujiayu2/article/details/103168317
QT亂碼總結(jié)編碼測試工程:
https://download.csdn.net/download/liujiayu2/11987065
?
?
?
1、unicode的誕生
????首先明白計算機能識別的都是二進(jìn)制010101010這種代碼,但是這些010010111人是難以看懂的,于是美國人就用ASCII碼制作了一張表,里面包含從a、b、c.......@%$等128個字符差不多半個字節(jié)(1111,1111==256???0111,1111==128),為了以后擴充方便就取了一個字節(jié),最高位是0,就這樣將英文字符、字符、數(shù)字128個包含進(jìn)去了,下次計算機的0101這種二進(jìn)制代碼就直接查這個ASCII表就知道對應(yīng)的字符。
????但是,美國用的字母,德國,英國。。。最重要的我們中國漢子幾萬個,一張表存不下啊。
????于是聰明的中國人發(fā)明了GBK編碼表,gbk編碼規(guī)定,計算機不能在每次都只讀一個字節(jié)(00000000,8位表示一個字節(jié))那么死板了,你要先看看第一位是不是為0,要是為0 的話,就當(dāng)作ASCII碼來讀入一個字節(jié),不然的話就讀入兩個字節(jié)(漢子太多一個字節(jié)存不下,讀入兩個字節(jié)表示漢字就查GBK)。
????那么每個國家一個表,這可就尷尬了,相互通信的時候由于解碼方式不同就會導(dǎo)致亂碼(用ASCII發(fā)郵件,計算機查ASCII表轉(zhuǎn)換成對應(yīng)0101010二進(jìn)制,接收的人用GBK解碼,將010101取查GBK肯定就查不到啊)。
????于是,國際組織就發(fā)明了一套公用的表unicode編碼,將所有國家,所有字符都收進(jìn)去了從0一直到100多萬。
?
2、utf-8的產(chǎn)生
????雖然世界通用的表unicode是有了,但是有人就發(fā)現(xiàn)這有點浪費資源啊。每次讓計算機讀取三個字節(jié)然后參照Unicode表解碼,那么像a、b...0、1、2...這些一個字節(jié)就夠了的就太浪費了。
????于是uft-8,utf-16,utf-32這些編碼方案就出現(xiàn)了。utf-16是用兩個字節(jié)來編碼所有的字符,utf-32則選擇用4個字節(jié)來編碼,utf-8為了節(jié)省資源,采用變長編碼,編碼長度從1個字節(jié)到6個字節(jié)不等。可由于互聯(lián)網(wǎng)大部分是1個字節(jié)(代碼很多英文的),所以最后大家選擇用的最多的還是utf-8。
?
總結(jié)一句就是
=====================
unicode 是一種包含所有字符的編碼表格,例如,給一個漢字規(guī)定一個代碼,一個字母也一個代碼。
=====================
一個unicode碼可能轉(zhuǎn)成長度為一個BYTE,或兩個,三個,四個BYTE的UTF8碼,取決于unicode碼的值(utf-8可變長)。
英文unicode碼因為值小于十六進(jìn)制表示的0x80(即8x16=128,即01111111=128,即一個字節(jié)就可以表示了),只要用一個BYTE的UTF8傳送,比送unicode兩個BYTEs快。
UTF8是為傳送unicode而想出來的“再編碼”方法罷了,將unicode編碼之后再在網(wǎng)絡(luò)傳輸。
因此,UTF-8最適合用來作為字符串網(wǎng)絡(luò)傳輸?shù)木幋a格式,自動變長節(jié)約空間嘛。解碼的時候按UTF-8先解碼成unicode,在查unicode表解碼二進(jìn)制,如下圖:
————————————————
版權(quán)聲明:本文為CSDN博主「勁楓」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/tcf_jingfeng/article/details/80134600
總結(jié)
以上是生活随笔為你收集整理的QT乱码总结1.Unicode 和 UTF-8的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QT乱码总结0.Qt乱码产生因素
- 下一篇: QT乱码总结2.gbk和ANSI和gb2