UTF-8的網頁引入一段JS後顯示為亂碼的解決方案.

來源:互聯網
上載者:User

前段時間有個站,新聞系統需要第三方自己推送.找到了那段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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.