1.字元集/字元編碼是什麼? 字元集或者說字元編碼就是給字元定義了數值編號以及數值編號存儲格式。 嚴格來說字元集和字元編碼是兩個概念: charset 是 character set 的簡寫,即字元集。 encoding 是 charset encoding 的簡寫,即字元集編碼,簡稱編碼。 字元集 ...
1.字元集/字元編碼是什麼?
字元集或者說字元編碼就是給字元定義了數值編號以及數值編號存儲格式。
嚴格來說字元集和字元編碼是兩個概念: charset 是 character set 的簡寫,即字元集。 encoding 是 charset encoding 的簡寫,即字元集編碼,簡稱編碼。 字元集:定義了每個字元對應的二進位數值關係,也就是給字元定義了一個數值編號。 字元編碼:定義了該數值怎麼存儲(用幾個位元組來表示,數值二進位格式(有無特定標示))。 但有時候又可以認為是同一個意思:因為唯一對應。 比如:ASCII、IOS-8859-1、GB2312、GBK等等既是字元集又是字元編碼。 不是同一個意思情況:一個字元集對應多個實現形式。 比如Unicode只是字元集,對應的字元編碼卻有多個: UTF-8、UTF-16、UTF-32 。 補充:
因為歷史原因,最初是一一對應可以看成一個意思,後來出現一對情況拆分兩個意思,
所以有些地方認為是一個意思,有些不這樣認為,存在混淆,得自己明辨是非。 比如:charset也表示字元編碼的意思。 在 html中用charset指定字元集: <meta charset="UTF-8"> 準確來說UTF-8是字元編碼。 而在xml中用encoding表示字元編碼顯得更加嚴緊: <?xml version="1.0" encoding="UTF-8"?> 實際我們只要關心字元編碼,因為由它決定存取和傳輸的格式。 值註意:關於Unicode的多重意思。 (1)Unicode 標準 (2)Unicode 字元集 (3)Unicode 的抽象編碼(編號),也即碼點(code point) (4)Unicode 的一個具體編碼實現,通常即為變長的 UTF-16(16 或 32 位),又或者是更早期的定長 16 位的 UCS-2 特別註意java中編碼的問題!: 1.常說的java採用Unicode編碼,用兩個位元組表示字元。 這裡的Unicode編碼的意思是用定長UTF-16字元編碼,也就是運行時記憶體中一個字元用兩個位元組存儲。
2.有時候說java預設是UTF-8編碼.
其實說的是jvm預設編碼是UTF-8,
該編碼預設用處:字元和位元組數據組的轉換,io流轉換。
如果沒有設置jvm預設編碼,那麼預設使用操作系統的編碼。
也可以自己更改jvm的編碼:更改JVM參數 -Dfile.encoding=UTF-8。
以上內容,對字元集和字元編碼應該有了個瞭解。
一般說某某使用了Unicode編碼其實說的是某個具體實現,最常用是UTF-8,UTF-16實現形式。
2.什麼是html實體or實體字元or字元實體?
通常說法:
HTML一些預留字元(有特殊意義字元(比如標簽的“<”標示)),不能直接在文本使用,必須使用字元實體。以及鍵盤不能直接輸入的字元。
常見的HTML實體名稱和字元

實體名稱 字元 描述 < < 小於號或顯示標記 > > 大於號或顯示標記 & & 可用於顯示其它特殊字元 " “ 引號 ® ® 已註冊 © © 版權 ™ ™ 商標   半個空白位   一個空白位 空格常見HTML實體
字元實體有三部分:
一個和號‘&’和一個實體名稱(或者一個‘#’ 和一個實體編號),以及一個分號‘;’。
例子:“<”的字元實體。
<兩種表現形式: 實體名稱的方式:< 實體編號的方式:< //或者 < (16進位格式(&#x;)) 字元編號其實是ascii碼的編號,並且用十進位和十六進位都可以。 一些特殊字元有實體名稱,可以用實體名稱表示,可以查下麵ISO-8859-1字元集表。 不只是預留字元!其實所有字元都能用字元實體來表示,通過實體編號也就是ascii碼的編號來表示。
ISO-8859-1(HTML 4.01 中預設)和 UTF-8(HTML5 中預設)都是基於 ASCII 構建的。
ASCII 字元集
ASCII 指的是“美國信息交換標準代碼”(American Standard Code for Information Interchange)。
表:

字元 數字 描述 0 - 31 Control characters (see below) 32 space ! 33 exclamation mark " 34 quotation mark # 35 number sign $ 36 dollar sign % 37 percent sign & 38 ampersand ' 39 apostrophe ( 40 left parenthesis ) 41 right parenthesis * 42 asterisk + 43 plus sign , 44 comma - 45 hyphen . 46 period / 47 slash 0 48 digit 0 1 49 digit 1 2 50 digit 2 3 51 digit 3 4 52 digit 4 5 53 digit 5 6 54 digit 6 7 55 digit 7 8 56 digit 8 9 57 digit 9 : 58 colon ; 59 semicolon < 60 less-than = 61 equals-to > 62 greater-than ? 63 question mark @ 64 at sign A 65 uppercase A B 66 uppercase B C 67 uppercase C D 68 uppercase D E 69 uppercase E F 70 uppercase F G 71 uppercase G H 72 uppercase H I 73 uppercase I J 74 uppercase J K 75 uppercase K L 76 uppercase L M 77 uppercase M N 78 uppercase N O 79 uppercase O P 80 uppercase P Q 81 uppercase Q R 82 uppercase R S 83 uppercase S T 84 uppercase T U 85 uppercase U V 86 uppercase V W 87 uppercase W X 88 uppercase X Y 89 uppercase Y Z 90 uppercase Z [ 91 left square bracket \ 92 backslash ] 93 right square bracket ^ 94 caret _ 95 underscore ` 96 grave accent a 97 lowercase a b 98 lowercase b c 99 lowercase c d 100 lowercase d e 101 lowercase e f 102 lowercase f g 103 lowercase g h 104 lowercase h i 105 lowercase i j 106 lowercase j k 107 lowercase k l 108 lowercase l m 109 lowercase m n 110 lowercase n o 111 lowercase o p 112 lowercase p q 113 lowercase q r 114 lowercase r s 115 lowercase s t 116 lowercase t u 117 lowercase u v 118 lowercase v w 119 lowercase w x 120 lowercase x y 121 lowercase y z 122 lowercase z { 123 left curly brace | 124 vertical bar } 125 right curly brace ~ 126 tilde ASCII 控制字元(範圍為 00-31,外加 127)旨在控制硬體設備。 控制字元(水平製表符、換行符和回車符除外)與 HTML 文檔無關。 字元 數字 描述 NUL 00 null character SOH 01 start of header STX 02 start of text ETX 03 end of text EOT 04 end of transmission ENQ 05 enquiry ACK 06 acknowledge BEL 07 bell (ring) BS 08 backspace HT 09 horizontal tab LF 10 line feed VT 11 vertical tab FF 12 form feed CR 13 carriage return SO 14 shift out SI 15 shift in DLE 16 data link escape DC1 17 device control 1 DC2 18 device control 2 DC3 19 device control 3 DC4 20 device control 4 NAK 21 negative acknowledge SYN 22 synchronize ETB 23 end transmission block CAN 24 cancel EM 25 end of medium SUB 26 substitute ESC 27 escape FS 28 file separator GS 29 group separator RS 30 record separator US 31 unit separator DEL 127 delete (rubout)128個ASCII字元
ISO-8859-1字元集
ISO-8859-1 是 HTML 4.01 中的預設字元。
使用範圍:北美,西歐,拉丁美洲,加勒比海,加拿大,非洲。 ISO(International Standards Organization,國際標準組織)為不同的字母/語言定義了標準字元集。 ISO-8859 是一個系列,還有覆蓋其他地方的比如,南歐,北歐的一些國家的字元。 包含了ascii所有字元外還有一些特殊符號。
(部分特殊的有實體名稱)

字元 實體編號 實體名稱 描述 0 - 31 Control characters 32 space ! 33 exclamation mark " 34 " quotation mark # 35 number sign $ 36 dollar sign % 37 percent sign & 38 & ampersand ' 39 apostrophe ( 40 left parenthesis ) 41 right parenthesis * 42 asterisk + 43 plus sign , 44 comma - 45 hyphen-minus . 46 full stop / 47 solidus 0 48 digit zero 1 49 digit one 2 50 digit two 3 51 digit three 4 52 digit four 5 53 digit five 6 54 digit six 7 55 digit seven 8 56 digit eight 9 57 digit nine : 58 colon ; 59 semicolon < 60 < less-than sign = 61 equals sign > 62 > greater-than sign ? 63 question mark @ 64 commercial at A 65 Latin capital letter A B 66 Latin capital letter B C 67 Latin capital letter C D 68 Latin capital letter D E 69 Latin capital letter E F 70 Latin capital letter F G 71 Latin capital letter G H 72 Latin capital letter H I 73 Latin capital letter I J 74 Latin capital letter J K 75 Latin capital letter K L 76 Latin capital letter L M 77 Latin capital letter M N 78 Latin capital letter N O 79 Latin capital letter O P 80 Latin capital letter P Q 81 Latin capital letter Q R 82 Latin capital letter R S 83 Latin capital letter S T 84 Latin capital letter T U 85 Latin capital letter U V 86 Latin capital letter V W 87 Latin capital letter W X 88 Latin capital letter X Y 89 Latin capital letter Y Z 90 Latin capital letter Z [ 91 left square bracket \ 92 reverse solidus ] 93 right square bracket ^ 94 circumflex accent _ 95 low line ` 96 grave accent a 97 Latin small letter a b 98 Latin small letter b c 99 Latin small letter c d 100 Latin small letter d e 101 Latin small letter e f 102 Latin small letter f g 103 Latin small letter g h 104 Latin small letter h i 105 Latin small letter i j 106 Latin small letter j k 107 Latin small letter k l 108 Latin small letter l m 109 Latin small letter m n 110 Latin small letter n o 111 Latin small letter o p 112 Latin small letter p q 113 Latin small letter q r 114 Latin small letter r s 115 Latin small letter s t 116 Latin small letter t u 117 Latin small letter u v 118 Latin small letter v w 119 Latin small letter w x 120 Latin small letter x y 121 Latin small letter y z 122 Latin small letter z { 123 left curly bracket | 124 vertical line } 125 right curly bracket ~ 126 tilde 127 Control character 在 ISO-8859-1 中,未定義 128 到 159 之間的字元。 但存在約定俗成一些字元: 字元 實體編號 實體名稱 描述 € 128 € euro sign 129 NOT USED ‚ 130 ‚ single low-9 quotation mark ƒ 131 ƒ Latin small letter f with hook „ 132 „ double low-9 quotation mark … 133 … horizontal ellipsis † 134 † dagger ‡ 135 ‡ double dagger ˆ 136 ˆ modifier letter circumflex accent ‰ 137 ‰ per mille sign Š 138 Š Latin capital letter S with caron ‹ 139 ‹ single left-pointing angle quotation mark Œ 140 Œ Latin capital ligature OE 141 NOT USED Ž 142 Ž Latin capital letter Z with caron 143 NOT USED 144 NOT USED ‘ 145 ‘ left single quotation mark ’ 146 ’ right single quotation mark “ 147 “ left double quotation mark ” 148 ” right double quotation mark • 149 • bullet – 150 – en dash — 151 — em dash ˜ 152 ˜ small tilde ™ 153 ™ trade mark sign š 154 š Latin small letter s with caron › 155 › single right-pointing angle quotation mark œ 156 œ Latin small ligature oe 157 NOT USED ž 158 ž Latin small letter z with caron Ÿ 159 Ÿ Latin capital letter Y with diaeresis ISO-8859-1(從 160 到 191 的編碼)的下一部分包含常用的特殊字元。 字元 實體編號 實體名稱 描述   non-breaking space ¡ ¡ ¡ inverted exclamation mark ¢ ¢ ¢ cent £ £ £ pound ¤ ¤ ¤ currency ¥ ¥ ¥ yen ¦ ¦ ¦ broken vertical bar § § § section ¨ ¨ ¨ spacing diaeresis © © © copyright ª ª ª feminine ordinal indicator « « « angle quotation mark (left) ¬ ¬ ¬ negation ­ ­ soft hyphen ® ® ® registered trademark ¯ ¯ ¯ spacing macron ° ° ° degree ± ± ± plus-or-minus ² ² ² superscript 2 ³ ³ ³ superscript 3 ´ ´ ´ spacing acute µ µ µ micro ¶ ¶ ¶ paragraph · · · middle dot ¸ ¸ ¸ spacing cedilla ¹ ¹ ¹ superscript 1 º º º masculine ordinal indicator » » » angle quotation mark (right) ¼ ¼ ¼ fraction 1/4 ½ ½ ½ fraction 1/2 ¾ ¾ ¾ fraction 3/4 ¿ ¿ ¿ inverted question mark ISO-8859-1 的較高部分(從 192 到 255 的編碼,215 和 247 除外)包含西歐國家/地區使用的字元。 字元 實體編號 實體名稱 描述 À À À capital a, grave accent Á Á Á capital a, acute accent    capital a, circumflex accent à à à capital a, tilde Ä Ä Ä capital a, umlaut mark Å Å Å capital a, ring Æ Æ Æ capital ae Ç Ç Ç capital c, cedilla È È È capital e, grave accent É É É capital e, acute accent Ê Ê Ê capital e, circumflex accent Ë Ë Ë capital e, umlaut mark Ì Ì Ì capital i, grave accent Í Í Í capital i, acute accent Î Î Î capital i, circumflex accent Ï Ï Ï capital i, umlaut mark Ð Ð Ð capital eth, Icelandic Ñ Ñ Ñ capital n, tilde Ò Ò Ò capital o, grave accent Ó Ó Ó capital o, acute accent Ô Ô Ô capital o, circumflex accent Õ Õ Õ capital o, tilde Ö Ö Ö capital o, umlaut mark × × × multiplication Ø Ø Ø capital o, slash Ù Ù Ù capital u, grave accent Ú Ú Ú capital u, acute accent Û Û Û capital u, circumflex accent Ü Ü Ü capital u, umlaut mark Ý Ý Ý capital y, acute accent Þ Þ Þ capital THORN, Icelandic ß ß ß small sharp s, German à à à small a, grave accent á á á small a, acute accent â â â small a, circumflex accent ã ã ã small a, tilde ä ä ä small a, umlaut mark å å å small a, ring æ æ æ small ae ç ç ç small c, cedilla è è è small e, grave accent é é é small e, acute accent ê ê ê small e, circumflex accent ë ë ë small e, umlaut mark ì ì ì small i, grave accent í í í small i, acute accent î î î small i, circumflex accent ï ï ï small i, umlaut mark ð ð ð small eth, Icelandic ñ ñ ñ small n, tilde ò ò ò small o, grave accent ó ó ó small o, acute accent ô ô ô small o, circumflex accent õ õ õ small o, tilde ö ö ö small o, umlaut mark ÷ ÷ ÷ division ø ø ø small o, slash ù ù ù small u, grave accent ú ú ú small u, acute accent û û û small u, circumflex accent ü ü ü small u, umlaut mark ý ý ý small y, acute accent þ þ þ small thorn, Icelandic ÿ ÿ ÿ small y, umlaut markISO-8859-1字元集
補充:HTML實體目的讓特殊字元不對解析HTML產生問題,事實卻又帶來新的XSS問題。
HTML實體增加了過濾xss的難度。 字元實體不會當做標簽處理但是寫在標簽屬性值位置卻可以按常規效果執行。 比如:如果href屬性值可以註入,做了對Javascript過濾,那麼 <a href=javascript:alert(1); >aa</a> 其中alert(1)不會執行。 如果javascript:alert(1);進行實體字元轉換為: javascript:alert(1); 那麼變成了下麵效果: <a href= javascript:alert(1); >aa</a> 這時候alert會正常執行。 xss利用一些屬性值可以執行js偽協議(javascript:執行腳本)。 據說實體字元是在dom樹節點創建後才會解碼,正因為如此,實體字元不能創建節點。
3.css實體,js實體
不僅html有實體字元,css,js都有!
在Unicode字元集也就是UTF-8字元編碼下,一些常見字元和實體表示如下:
符號 HTML JS CSS 符號 HTML JS CSS ⇠ ⇠ \u21E0 \21E0 ⇢ ⇢ \u21E2 \21E2 ⇡ ⇡ \u21E1 \21E1 ⇣ ⇣ \u21E3 \21E3 ↞ ↞ \u219E \219E ↠ ↠ \u21A0 \21A0 ↟ ↟ \u219F \219F ↡ ↡ \u21A1 \21A1 ← ← \u2190 \2190 → → \u2192 \2192 ↑ ↑ \u2191 \2191 ↓ ↓ \u2193 \2193 ↔ ↔ \u2194 \2194 ↕ ↕ \u2195 \2195 ⇄ ⇄ \u21C4 \21C4 ⇅ ⇅ \u21C5 \21C5 ↢ ↢ \u21A2 \21A2 ↣ ↣ \u21A3 \21A3 ⇞ &