- A+
所属分类:Web前端
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 mark
ISO-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 ⇞ ⇞ u21DE 21DE ⇟ ⇟ u21DF 21DF ↫ ↫ u21AB 21AB ↬ ↬ u21AC 21AC ⇜ ⇜ u21DC 21DC ⇝ ⇝ u21DD 21DD ↚ ↚ u219A 219A ↛ ↛ u219B 219B ↮ ↮ u21AE 21AE ↭ ↭ u21AD 21AD ⇦ ⇦ u21E6 21E6 ⇨ ⇨ u21E8 21E8 ⇧ ⇧ u21E7 21E7 ⇩ ⇩ u21E9 21E9 ▲ ▲ u25B2 25B2 ► ► u25BA 25BA ▼ ▼ u25BC 25BC ◄ ◄ u25C4 25C4 ➔ ➔ u2794 2794 ➙ ➙ u2799 2799 ➨ ➨ u27A8 27A8 ➲ ➲ u27B2 27B2 ➜ ➜ u279C 279C ➞ ➞ u279E 279E ➟ ➟ u279F 279F ➠ ➠ u27A0 27A0 ➤ ➤ u27A4 27A4 ➥ ➥ u27A5 27A5 ➦ ➦ u27A6 27A6 ➧ ➧ u27A7 27A7 ➵ ➵ u27B5 27B5 ➸ ➸ u27B8 27B8 ➼ ➼ u27BC 27BC ➽ ➽ u27BD 27BD ➺ ➺ u27BA 27BA ➳ ➳ u27B3 27B3 ↷ ↷ u21B7 21B7 ↶ ↶ u21B6 21B6 ↻ ↻ u21BB 21BB ↺ ↺ u21BA 21BA ↵ ↵ u21B5 21B5 ↯ ↯ u21AF 21AF
css实体例子:
<!DOCTYPE html> <html> <style> p:after { content: '21E0'; } </style> <body> <p>显示</p> </body> </html>
js实体的例子:
var code2 = 'u0061'; document.write(code2); // a
总结:html,js,css实体表示格式:
以字符的编号为基础 html实体,“&#”+字符编号+“;” ; CSS实体,“”+字符编号 ; javascript ,“u”+字符编号。