前段時間有個站,新聞系統需要第三方自己推送.找到了那段js代碼後. 連結過去發現是亂碼.
也就是需要連結一段js 然後替換掉之前寫的一個新聞版面. 直接在引用的js裡面添加一個charset就可以編碼轉換一下 就行了 具體操作如下
引用的js代碼是
<script src="http://news.abvde.edu.cn/user_newscolm.php?j=1.23.456.789"></script>
修改為
<script src="http://news.abvde.edu.cn/user_newscolm.php?j=1.23.456.789" charset="GBK"></script>
就可以了,至於為什麼不用gb2312,這個因為有些字元在gb2312和在GBK中不一樣,為了擴大相容性,我們直接使用GBK減少錯誤.
注意使用那段js後,你可能需要重新修改一些靜態頁面的產生和css樣式.
詳細的GB2312 GBK GB18030編碼區別如下
Unicode、GB2312、GBK和GB18030中的漢字 GB18030有兩個版本:GB18030-2000和GB18030-2005。GB18030-2000是GBK的取代版本,它的主要特點是在GBK基礎上增加了CJK統一漢字擴充A的漢字。GB18030-2005的主要特點是在GB18030-2000基礎上增加了CJK統一漢字擴充B的漢字。本文數一數GB18030中的漢字,也順便看看其它標準中的漢字。 1 Unicode中的漢字
在Unicode 5.0的99089個字元中,有71226個字元與漢字有關。它們的分布如下:
| Block名稱 |
開始碼位 |
結束碼位 |
字元數 |
| CJK統一漢字 |
4E00 |
9FBB |
20924 |
|
| CJK統一漢字擴充A |
3400 |
4DB5 |
6582 |
|
| CJK統一漢字擴充B |
20000 |
2A6D6 |
42711 |
|
| CJK相容漢字 |
F900 |
FA2D |
302 |
|
| CJK相容漢字 |
FA30 |
FA6A |
59 |
|
| CJK相容漢字 |
FA70 |
FAD9 |
106 |
| CJK相容漢字補充 |
2F800 |
2FA1D |
542 |
如果不算相容漢字,Unicode目前支援的漢字總數是20924+6582+42711=70217。
這裡有一個細節。在早期的Unicode版本中,CJK統一漢字區的範圍是0x4E00-0x9FA5,也就是我們經常提到的20902個漢字。目前的版本的Unicode增加了22個字元,碼位是0x9FA6-0x9FBB。它們是:
那麼GB18030是否支援這22個字元。後面還會討論。 2 GB2312
1980年的GB2312一共收錄了7445個字元,包括6763個漢字和682個其它符號。漢字區的內碼範圍高位元組從B0-F7,低位元組從A1-FE,佔用的碼位是72*94=6768。其中有5個空位是D7FA-D7FE。
這6763個漢字在Unicode中不是連續的,分布在CJK統一漢字字元區(0x4E00-0x9FA5)的20902個漢字中。 3 GBK
1995年的漢字擴充規範GBK1.0收錄了21886個符號,包括21003個漢字和883個其它符號。
這21003漢字包括CJK統一漢字區的20902個漢字。餘下的101個漢字包括: 增補漢字和部首80個,包括28個部首和52個漢字。GBK編碼是從FE50-FE7E,FE80-FEA0。下表徵圖注了Unicode編碼。
在制定GBK時,Unicode中還沒有這些字元,所以使用了專用區的碼位,這80個字元的碼位是0xE815-0xE864。後來,Unicode將52個漢字收錄到“CJK統一漢字擴充A”。28個部首中有14個部首被收錄到“CJK部首補充區”。所以在上圖中,這些字元都有兩個Unicode編碼。
上圖中淡黃色背景的8個部首被收錄到“CJK統一漢字區”的新增地區,即前面提到的0x9FA6-0x9FBB。還有6個淡灰色背景的部首被Unicode收錄到“CJK統一漢字擴充B”(網友slt指正)。
請注意,淡黃色和淡灰色的14個字元按照GB18030還是應該映射到PUA碼位。這14個字元與非PUA碼位的映射關係只是網友找出來的,不是標準規定的。如果按照GBK編碼,這80個字元應該全部映射到PUA碼位。GB18030將其中66個字元對應表到了非PUA碼位。不過在Windows中,簡體中文地區的預設字碼頁還是GBK,不是GB18030。 CJK相容漢字區挑選出來的21個漢字。見下表:
| 漢字 |
GBK編碼 |
Unicode編碼 |
| 郎 |
FD9C |
F92C |
| 凉 |
FD9D |
F979 |
| 秊 |
FD9E |
F995 |
| 裏 |
FD9F |
F9E7 |
| 隣 |
FDA0 |
F9F1 |
| 兀 |
FE40 |
FA0C |
| 嗀 |
FE41 |
FA0D |
| 﨎 |
FE42 |
FA0E |
| 﨏 |
FE43 |
FA0F |
| 﨑 |
FE44 |
FA11 |
| 﨓 |
FE45 |
FA13 |
| 﨔 |
FE46 |
FA14 |
| 礼 |
FE47 |
FA18 |
| 﨟 |
FE48 |
FA1F |
| 蘒 |
FE49 |
FA20 |
| 﨡 |
FE4A |
FA21 |
| 﨣 |
FE4B |
FA23 |
| 﨤 |
FE4C |
FA24 |
| 﨧 |
FE4D |
FA27 |
| 﨨 |
FE4E |
FA28 |
| 﨩 |
FE4F |
FA29 |
4 GB18030-2000
4.1 字彙
GB18030-2000的字彙部分是這樣寫的: 本標準收錄的字元分別以單位元組、雙位元組和四位元組編碼。
5.1 單位元組部分
本標準中,單位元組的部分收錄了GB 11383的0x00到0x7F全部128個字元及單位元組編碼的歐元符號。
5.2 雙位元組部分
本標準中,雙位元組的部分收錄內容如下:
GB 13000.1的全部CJK統一漢字字元。
GB 13000.1的CJK相容區挑選出來的21個漢字。
GB 13000.1中收錄而GB 2312未收錄的我國台灣地區使用的圖形字元139個。
GB 13000.1收錄的其它字元31個。
GB 2312中的非漢字元號。
GB 12345 的豎排標點符號19個。
GB 2312未收錄的10個小寫羅馬數字。
GB 2312未收錄的帶音調的漢語拼音字母5個以及ɑ 和ɡ 。
漢字數字“〇”。
表意文字描述符13個。
增補漢字和部首/構件80個。
雙位元組編碼的歐元符號。
5.3 四位元組部分
本標準的四位元組的部分,收錄了上述雙位元組字元之外的,包括CJK統一漢字擴充A在內的GB 13000.1 中的全部字元。
4.2 漢字
如下表所示,GB18030-2000收錄了27533個漢字:
| 類別 |
碼位範圍 |
碼位元 |
字元數 |
字元類型 |
| 雙位元組部分 |
第一位元組 0xB0-0xF7 第二位元組 0xA1-0xFE |
6768 |
6763 |
漢字 |
第一位元組0x81-0xA0 第二位元組0x40-0xFE |
6080 |
6080 |
漢字 |
第一位元組0xAA-0xFE 第二位元組0x40-0xA0 |
8160 |
8160 |
漢字 |
| 四位元組部分 |
第一位元組0x81-0x82 第二位元組0x30-0x39 第三位元組0x81-0xFE 第四位元組0x30-0x39 |
6530 |
6530 |
CJK統一漢字擴充A |
27533就是6763+6080+8160+6530。雙位元組部分的6763+6080+8160=21003個漢字就是GBK的21003個漢字。
在Unicode中,CJK統一漢字擴充A有6582個漢字,為什麼這裡只有6530個漢字。
這是因為在GBK時代,雙位元組部分已經收錄過CJK統一漢字擴充A的52個漢字,所以還餘6530個漢字。 5 GB18030-2005 5.1 字彙
GB18030-2005的字彙部分是這樣寫的: 本標準收錄的字元分別以單位元組、雙位元組或四位元組編碼。
5.1 單位元組部分
本標準中,單位元組的部分收錄了GB/T 11383-1989的0x00到0x7F全部128個字元。
5.2 雙位元組部分
本標準中,雙位元組的部分收錄內容如下:
GB 13000.1-1993的全部CJK統一漢字字元。見附錄A。
GB 13000.1-1993的CJK相容區挑選出來的21個漢字。見附錄A。
GB 13000.1-1993中收錄而GB 2312未收錄的我國台灣地區使用的圖形字元139個。見附錄A。
GB 13000.1-1993收錄的其它字元31個。見附錄A。
GB 2312中的非漢字元號。見附錄A。
GB 12345 的豎排標點符號19個。見附錄A。
GB 2312未收錄的10個小寫羅馬數字。見附錄A。
GB 2312未收錄的帶音調的漢語拼音字母5個以及ɑ 和ɡ 。見附錄A。
漢字數字“〇”。 見附錄A。
表意文字描述符13個。見附錄A和附錄B。
對GB 13000.1-1993增補的漢字和部首/構件80個。見附錄A和附錄C。
雙位元組編碼的歐元符號。見附錄A。
5.3 四位元組部分
本標準的四位元組的部分,收錄了上述雙位元組字元之外的,GB 13000的CJK統一漢字擴充A、CJK統一漢字擴充B和已經在GB13000中編碼的我國少數民族文字的字元。見附錄D。
GB18030-2005最主要的變化是增加了CJK統一漢字擴充B。它還去掉了單位元組編碼的歐元符號(0x80)。 5.2 漢字
如下表所示,GB18030-2005收錄了70244個漢字:
| 類別 |
碼位範圍 |
碼位元 |
字元數 |
字元類型 |
| 雙位元組部分 |
第一位元組 0xB0-0xF7 第二位元組 0xA1-0xFE |
6768 |
6763 |
漢字 |
第一位元組0x81-0xA0 第二位元組0x40-0xFE |
6080 |
6080 |
漢字 |
第一位元組0xAA-0xFE 第二位元組0x40-0xA0 |
8160 |
8160 |
漢字 |
| 四位元組部分 |
第一位元組0x81-0x82 第二位元組0x30-0x39 第三位元組0x81-0xFE 第四位元組0x30-0x39 |
6530 |
6530 |
CJK統一漢字擴充A |
第一位元組0x95-0x98 第二位元組0x30-0x39 第三位元組0x81-0xFE 第四位元組0x30-0x39 |
42711 |
42711 |
CJK統一漢字擴充B |
70244就是6763+6080+8160+6530+42711。 6 結束語
GB2312有6763個漢字,GBK有21003個漢字,GB18030-2000有27533個漢字,GB18030-2005有70244個漢字。
Unicode 5.0中,如果不算相容區,目前有70217個漢字。讓我們比較一下Unicode的70217漢字和GB18030-2005中的70244漢字:
| GB18030-2005 |
Unicode 5.0 |
對應的Unicode編碼 |
| CJK統一漢字的20902漢字 |
CJK統一漢字的20902漢字 |
0x4E00-0x9FA5 |
| CJK統一漢字擴充A的6582漢字 |
CJK統一漢字擴充A的6582漢字 |
0x3400-0x4DB5 |
| CJK統一漢字擴充B的42711漢字 |
CJK統一漢字擴充B的42711漢字 |
0x20000-0x2A6D6 |
| CJK部首補充區的14個部首 |
未計入 |
2E81, 2E84, 2E88, 2E8B, 2E8C, 2E97, 2EA7, 2EAA, 2EAE, 2EB3, 2EB6, 2EB7, 2EBB, 2ECA |
| CJK相容漢字區的21個漢字 |
未計入 |
F92C, F979, F995, F9E7, F9F1, FA0C, FA0D, FA0E, FA0F, FA11, FA13, FA14, FA18, FA1F, FA20, FA21, FA23, FA24, FA27, FA28, FA29 |
| “”8個部首 |
CJK統一漢字區新增了這8個字元 |
0x9FB4-0x9FBB |
| 未計入 |
CJK統一漢字區新增的14個字元 |
0x9FA6-0x9FB3 |
CJK統一漢字區新增的0x9FA6-0x9FB3這14個字元在GB18030中有對應的碼位(0x82358F33-0x82358F39, 0x82359030-0x82359039, 0x82359130-0x82359134),不過GB18030沒有列出這些字元。 附錄1 GBK增補的80個漢字和部首
GBK增補的80個字元本來是放在PUA區的,後來又被Unicode收錄。所以既可以用PUA區的編碼錶示,也可以用非PUA編碼錶示。本文中的表格可能不便複製,這裡補充一張表格:
| 漢字 |
GBK編碼 |
PUA編碼 |
非PUA編碼 |
|
FE50 |
E815 |
2E81 |
|
FE51 |
E816 |
20087 |
|
FE52 |
E817 |
20089 |
|
FE53 |
E818 |
200CC |
|
FE54 |
E819 |
2E84 |
|
FE55 |
E81A |
3473 |
|
FE56 |
E81B |
3447 |
|
FE57 |
E81C |
2E88 |
|
FE58 |
E81D |
2E8B |
|
FE59 |
E81E |
9FB4 |
|
FE5A |
E81F |
359E |
|
FE5B |
E820 |
361A |
|
FE5C |
E821 |
360E |
|
FE5D |
E822 |
2E8C |
|
|