篇幅还是较长,不知道怎么来分割,索性就一起了 在阅读的过程中,一定要不忘初心(想想为什么学编解码)

正片开始

Java的编解码具体实现

​ 这里将以实际例子介绍 Java 中如何实现编码及解码,下面我们以“I am 君山”这个字符串为例介绍 Java 中如何把它以 ISO-8859-1、GB2312、GBK、UTF-16、UTF-8 编码格式进行编码的。(书的作者笔名是“君山”)

 String name = "I am 君山";try {byte[] iso8859 = name.getBytes("ISO-8859-1");byte[] gb2312 = name.getBytes("GB2312");byte[] gbk = name.getBytes("GBK");byte[] utf16 = name.getBytes("UTF-16");byte[] utf8 = name.getBytes("UTF-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();}

我们先来看一下Java是如何编码的,下面是 Java 中编码需要用到的类图:(3.1中有第一层的代码)老千层饼了

那么其中的过程就是:

#mermaid-svg-gQiAHhjIyNk1E1vR .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-gQiAHhjIyNk1E1vR .label text{fill:#333}#mermaid-svg-gQiAHhjIyNk1E1vR .node rect,#mermaid-svg-gQiAHhjIyNk1E1vR .node circle,#mermaid-svg-gQiAHhjIyNk1E1vR .node ellipse,#mermaid-svg-gQiAHhjIyNk1E1vR .node polygon,#mermaid-svg-gQiAHhjIyNk1E1vR .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-gQiAHhjIyNk1E1vR .node .label{text-align:center;fill:#333}#mermaid-svg-gQiAHhjIyNk1E1vR .node.clickable{cursor:pointer}#mermaid-svg-gQiAHhjIyNk1E1vR .arrowheadPath{fill:#333}#mermaid-svg-gQiAHhjIyNk1E1vR .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-gQiAHhjIyNk1E1vR .flowchart-link{stroke:#333;fill:none}#mermaid-svg-gQiAHhjIyNk1E1vR .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-gQiAHhjIyNk1E1vR .edgeLabel rect{opacity:0.9}#mermaid-svg-gQiAHhjIyNk1E1vR .edgeLabel span{color:#333}#mermaid-svg-gQiAHhjIyNk1E1vR .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-gQiAHhjIyNk1E1vR .cluster text{fill:#333}#mermaid-svg-gQiAHhjIyNk1E1vR div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-gQiAHhjIyNk1E1vR .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-gQiAHhjIyNk1E1vR text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-gQiAHhjIyNk1E1vR .actor-line{stroke:grey}#mermaid-svg-gQiAHhjIyNk1E1vR .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-gQiAHhjIyNk1E1vR .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-gQiAHhjIyNk1E1vR #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-gQiAHhjIyNk1E1vR .sequenceNumber{fill:#fff}#mermaid-svg-gQiAHhjIyNk1E1vR #sequencenumber{fill:#333}#mermaid-svg-gQiAHhjIyNk1E1vR #crosshead path{fill:#333;stroke:#333}#mermaid-svg-gQiAHhjIyNk1E1vR .messageText{fill:#333;stroke:#333}#mermaid-svg-gQiAHhjIyNk1E1vR .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-gQiAHhjIyNk1E1vR .labelText,#mermaid-svg-gQiAHhjIyNk1E1vR .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-gQiAHhjIyNk1E1vR .loopText,#mermaid-svg-gQiAHhjIyNk1E1vR .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-gQiAHhjIyNk1E1vR .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-gQiAHhjIyNk1E1vR .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-gQiAHhjIyNk1E1vR .noteText,#mermaid-svg-gQiAHhjIyNk1E1vR .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-gQiAHhjIyNk1E1vR .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-gQiAHhjIyNk1E1vR .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-gQiAHhjIyNk1E1vR .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-gQiAHhjIyNk1E1vR .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gQiAHhjIyNk1E1vR .section{stroke:none;opacity:0.2}#mermaid-svg-gQiAHhjIyNk1E1vR .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-gQiAHhjIyNk1E1vR .section2{fill:#fff400}#mermaid-svg-gQiAHhjIyNk1E1vR .section1,#mermaid-svg-gQiAHhjIyNk1E1vR .section3{fill:#fff;opacity:0.2}#mermaid-svg-gQiAHhjIyNk1E1vR .sectionTitle0{fill:#333}#mermaid-svg-gQiAHhjIyNk1E1vR .sectionTitle1{fill:#333}#mermaid-svg-gQiAHhjIyNk1E1vR .sectionTitle2{fill:#333}#mermaid-svg-gQiAHhjIyNk1E1vR .sectionTitle3{fill:#333}#mermaid-svg-gQiAHhjIyNk1E1vR .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gQiAHhjIyNk1E1vR .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-gQiAHhjIyNk1E1vR .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gQiAHhjIyNk1E1vR .grid path{stroke-width:0}#mermaid-svg-gQiAHhjIyNk1E1vR .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-gQiAHhjIyNk1E1vR .task{stroke-width:2}#mermaid-svg-gQiAHhjIyNk1E1vR .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gQiAHhjIyNk1E1vR .taskText:not([font-size]){font-size:11px}#mermaid-svg-gQiAHhjIyNk1E1vR .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gQiAHhjIyNk1E1vR .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-gQiAHhjIyNk1E1vR .task.clickable{cursor:pointer}#mermaid-svg-gQiAHhjIyNk1E1vR .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-gQiAHhjIyNk1E1vR .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-gQiAHhjIyNk1E1vR .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-gQiAHhjIyNk1E1vR .taskText0,#mermaid-svg-gQiAHhjIyNk1E1vR .taskText1,#mermaid-svg-gQiAHhjIyNk1E1vR .taskText2,#mermaid-svg-gQiAHhjIyNk1E1vR .taskText3{fill:#fff}#mermaid-svg-gQiAHhjIyNk1E1vR .task0,#mermaid-svg-gQiAHhjIyNk1E1vR .task1,#mermaid-svg-gQiAHhjIyNk1E1vR .task2,#mermaid-svg-gQiAHhjIyNk1E1vR .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-gQiAHhjIyNk1E1vR .taskTextOutside0,#mermaid-svg-gQiAHhjIyNk1E1vR .taskTextOutside2{fill:#000}#mermaid-svg-gQiAHhjIyNk1E1vR .taskTextOutside1,#mermaid-svg-gQiAHhjIyNk1E1vR .taskTextOutside3{fill:#000}#mermaid-svg-gQiAHhjIyNk1E1vR .active0,#mermaid-svg-gQiAHhjIyNk1E1vR .active1,#mermaid-svg-gQiAHhjIyNk1E1vR .active2,#mermaid-svg-gQiAHhjIyNk1E1vR .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-gQiAHhjIyNk1E1vR .activeText0,#mermaid-svg-gQiAHhjIyNk1E1vR .activeText1,#mermaid-svg-gQiAHhjIyNk1E1vR .activeText2,#mermaid-svg-gQiAHhjIyNk1E1vR .activeText3{fill:#000 !important}#mermaid-svg-gQiAHhjIyNk1E1vR .done0,#mermaid-svg-gQiAHhjIyNk1E1vR .done1,#mermaid-svg-gQiAHhjIyNk1E1vR .done2,#mermaid-svg-gQiAHhjIyNk1E1vR .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-gQiAHhjIyNk1E1vR .doneText0,#mermaid-svg-gQiAHhjIyNk1E1vR .doneText1,#mermaid-svg-gQiAHhjIyNk1E1vR .doneText2,#mermaid-svg-gQiAHhjIyNk1E1vR .doneText3{fill:#000 !important}#mermaid-svg-gQiAHhjIyNk1E1vR .crit0,#mermaid-svg-gQiAHhjIyNk1E1vR .crit1,#mermaid-svg-gQiAHhjIyNk1E1vR .crit2,#mermaid-svg-gQiAHhjIyNk1E1vR .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-gQiAHhjIyNk1E1vR .activeCrit0,#mermaid-svg-gQiAHhjIyNk1E1vR .activeCrit1,#mermaid-svg-gQiAHhjIyNk1E1vR .activeCrit2,#mermaid-svg-gQiAHhjIyNk1E1vR .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-gQiAHhjIyNk1E1vR .doneCrit0,#mermaid-svg-gQiAHhjIyNk1E1vR .doneCrit1,#mermaid-svg-gQiAHhjIyNk1E1vR .doneCrit2,#mermaid-svg-gQiAHhjIyNk1E1vR .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-gQiAHhjIyNk1E1vR .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-gQiAHhjIyNk1E1vR .milestoneText{font-style:italic}#mermaid-svg-gQiAHhjIyNk1E1vR .doneCritText0,#mermaid-svg-gQiAHhjIyNk1E1vR .doneCritText1,#mermaid-svg-gQiAHhjIyNk1E1vR .doneCritText2,#mermaid-svg-gQiAHhjIyNk1E1vR .doneCritText3{fill:#000 !important}#mermaid-svg-gQiAHhjIyNk1E1vR .activeCritText0,#mermaid-svg-gQiAHhjIyNk1E1vR .activeCritText1,#mermaid-svg-gQiAHhjIyNk1E1vR .activeCritText2,#mermaid-svg-gQiAHhjIyNk1E1vR .activeCritText3{fill:#000 !important}#mermaid-svg-gQiAHhjIyNk1E1vR .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gQiAHhjIyNk1E1vR g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-gQiAHhjIyNk1E1vR g.classGroup text .title{font-weight:bolder}#mermaid-svg-gQiAHhjIyNk1E1vR g.clickable{cursor:pointer}#mermaid-svg-gQiAHhjIyNk1E1vR g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-gQiAHhjIyNk1E1vR g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-gQiAHhjIyNk1E1vR .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-gQiAHhjIyNk1E1vR .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-gQiAHhjIyNk1E1vR .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-gQiAHhjIyNk1E1vR .dashed-line{stroke-dasharray:3}#mermaid-svg-gQiAHhjIyNk1E1vR #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-gQiAHhjIyNk1E1vR #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-gQiAHhjIyNk1E1vR #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-gQiAHhjIyNk1E1vR #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-gQiAHhjIyNk1E1vR #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-gQiAHhjIyNk1E1vR #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-gQiAHhjIyNk1E1vR #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-gQiAHhjIyNk1E1vR #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-gQiAHhjIyNk1E1vR .commit-id,#mermaid-svg-gQiAHhjIyNk1E1vR .commit-msg,#mermaid-svg-gQiAHhjIyNk1E1vR .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gQiAHhjIyNk1E1vR .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gQiAHhjIyNk1E1vR .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gQiAHhjIyNk1E1vR g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gQiAHhjIyNk1E1vR g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-gQiAHhjIyNk1E1vR g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-gQiAHhjIyNk1E1vR g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-gQiAHhjIyNk1E1vR g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-gQiAHhjIyNk1E1vR g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-gQiAHhjIyNk1E1vR .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-gQiAHhjIyNk1E1vR .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-gQiAHhjIyNk1E1vR .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-gQiAHhjIyNk1E1vR .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-gQiAHhjIyNk1E1vR .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-gQiAHhjIyNk1E1vR .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-gQiAHhjIyNk1E1vR .edgeLabel text{fill:#333}#mermaid-svg-gQiAHhjIyNk1E1vR .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-gQiAHhjIyNk1E1vR .node circle.state-start{fill:black;stroke:black}#mermaid-svg-gQiAHhjIyNk1E1vR .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-gQiAHhjIyNk1E1vR #statediagram-barbEnd{fill:#9370db}#mermaid-svg-gQiAHhjIyNk1E1vR .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-gQiAHhjIyNk1E1vR .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-gQiAHhjIyNk1E1vR .statediagram-state .divider{stroke:#9370db}#mermaid-svg-gQiAHhjIyNk1E1vR .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-gQiAHhjIyNk1E1vR .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-gQiAHhjIyNk1E1vR .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-gQiAHhjIyNk1E1vR .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-gQiAHhjIyNk1E1vR .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-gQiAHhjIyNk1E1vR .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-gQiAHhjIyNk1E1vR .note-edge{stroke-dasharray:5}#mermaid-svg-gQiAHhjIyNk1E1vR .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-gQiAHhjIyNk1E1vR .error-icon{fill:#522}#mermaid-svg-gQiAHhjIyNk1E1vR .error-text{fill:#522;stroke:#522}#mermaid-svg-gQiAHhjIyNk1E1vR .edge-thickness-normal{stroke-width:2px}#mermaid-svg-gQiAHhjIyNk1E1vR .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-gQiAHhjIyNk1E1vR .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-gQiAHhjIyNk1E1vR .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-gQiAHhjIyNk1E1vR .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-gQiAHhjIyNk1E1vR .marker{fill:#333}#mermaid-svg-gQiAHhjIyNk1E1vR .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;} #mermaid-svg-gQiAHhjIyNk1E1vR {color: rgba(0, 0, 0, 0.75);font: ;}

Charset.forName方法
对应的Charset类
创建CharsetEncoder对象
CharsetEncoder.encode方法编码

更详细一点,String.getBytes(charsetName)编码过程的时序图为:

#mermaid-svg-ND7M8Okcfa2RNJ7G .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-ND7M8Okcfa2RNJ7G .label text{fill:#333}#mermaid-svg-ND7M8Okcfa2RNJ7G .node rect,#mermaid-svg-ND7M8Okcfa2RNJ7G .node circle,#mermaid-svg-ND7M8Okcfa2RNJ7G .node ellipse,#mermaid-svg-ND7M8Okcfa2RNJ7G .node polygon,#mermaid-svg-ND7M8Okcfa2RNJ7G .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-ND7M8Okcfa2RNJ7G .node .label{text-align:center;fill:#333}#mermaid-svg-ND7M8Okcfa2RNJ7G .node.clickable{cursor:pointer}#mermaid-svg-ND7M8Okcfa2RNJ7G .arrowheadPath{fill:#333}#mermaid-svg-ND7M8Okcfa2RNJ7G .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-ND7M8Okcfa2RNJ7G .flowchart-link{stroke:#333;fill:none}#mermaid-svg-ND7M8Okcfa2RNJ7G .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-ND7M8Okcfa2RNJ7G .edgeLabel rect{opacity:0.9}#mermaid-svg-ND7M8Okcfa2RNJ7G .edgeLabel span{color:#333}#mermaid-svg-ND7M8Okcfa2RNJ7G .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-ND7M8Okcfa2RNJ7G .cluster text{fill:#333}#mermaid-svg-ND7M8Okcfa2RNJ7G div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-ND7M8Okcfa2RNJ7G .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-ND7M8Okcfa2RNJ7G text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-ND7M8Okcfa2RNJ7G .actor-line{stroke:grey}#mermaid-svg-ND7M8Okcfa2RNJ7G .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-ND7M8Okcfa2RNJ7G .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-ND7M8Okcfa2RNJ7G #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-ND7M8Okcfa2RNJ7G .sequenceNumber{fill:#fff}#mermaid-svg-ND7M8Okcfa2RNJ7G #sequencenumber{fill:#333}#mermaid-svg-ND7M8Okcfa2RNJ7G #crosshead path{fill:#333;stroke:#333}#mermaid-svg-ND7M8Okcfa2RNJ7G .messageText{fill:#333;stroke:#333}#mermaid-svg-ND7M8Okcfa2RNJ7G .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-ND7M8Okcfa2RNJ7G .labelText,#mermaid-svg-ND7M8Okcfa2RNJ7G .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-ND7M8Okcfa2RNJ7G .loopText,#mermaid-svg-ND7M8Okcfa2RNJ7G .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-ND7M8Okcfa2RNJ7G .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-ND7M8Okcfa2RNJ7G .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-ND7M8Okcfa2RNJ7G .noteText,#mermaid-svg-ND7M8Okcfa2RNJ7G .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-ND7M8Okcfa2RNJ7G .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-ND7M8Okcfa2RNJ7G .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-ND7M8Okcfa2RNJ7G .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-ND7M8Okcfa2RNJ7G .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-ND7M8Okcfa2RNJ7G .section{stroke:none;opacity:0.2}#mermaid-svg-ND7M8Okcfa2RNJ7G .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-ND7M8Okcfa2RNJ7G .section2{fill:#fff400}#mermaid-svg-ND7M8Okcfa2RNJ7G .section1,#mermaid-svg-ND7M8Okcfa2RNJ7G .section3{fill:#fff;opacity:0.2}#mermaid-svg-ND7M8Okcfa2RNJ7G .sectionTitle0{fill:#333}#mermaid-svg-ND7M8Okcfa2RNJ7G .sectionTitle1{fill:#333}#mermaid-svg-ND7M8Okcfa2RNJ7G .sectionTitle2{fill:#333}#mermaid-svg-ND7M8Okcfa2RNJ7G .sectionTitle3{fill:#333}#mermaid-svg-ND7M8Okcfa2RNJ7G .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-ND7M8Okcfa2RNJ7G .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-ND7M8Okcfa2RNJ7G .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-ND7M8Okcfa2RNJ7G .grid path{stroke-width:0}#mermaid-svg-ND7M8Okcfa2RNJ7G .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-ND7M8Okcfa2RNJ7G .task{stroke-width:2}#mermaid-svg-ND7M8Okcfa2RNJ7G .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-ND7M8Okcfa2RNJ7G .taskText:not([font-size]){font-size:11px}#mermaid-svg-ND7M8Okcfa2RNJ7G .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-ND7M8Okcfa2RNJ7G .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-ND7M8Okcfa2RNJ7G .task.clickable{cursor:pointer}#mermaid-svg-ND7M8Okcfa2RNJ7G .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-ND7M8Okcfa2RNJ7G .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-ND7M8Okcfa2RNJ7G .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-ND7M8Okcfa2RNJ7G .taskText0,#mermaid-svg-ND7M8Okcfa2RNJ7G .taskText1,#mermaid-svg-ND7M8Okcfa2RNJ7G .taskText2,#mermaid-svg-ND7M8Okcfa2RNJ7G .taskText3{fill:#fff}#mermaid-svg-ND7M8Okcfa2RNJ7G .task0,#mermaid-svg-ND7M8Okcfa2RNJ7G .task1,#mermaid-svg-ND7M8Okcfa2RNJ7G .task2,#mermaid-svg-ND7M8Okcfa2RNJ7G .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-ND7M8Okcfa2RNJ7G .taskTextOutside0,#mermaid-svg-ND7M8Okcfa2RNJ7G .taskTextOutside2{fill:#000}#mermaid-svg-ND7M8Okcfa2RNJ7G .taskTextOutside1,#mermaid-svg-ND7M8Okcfa2RNJ7G .taskTextOutside3{fill:#000}#mermaid-svg-ND7M8Okcfa2RNJ7G .active0,#mermaid-svg-ND7M8Okcfa2RNJ7G .active1,#mermaid-svg-ND7M8Okcfa2RNJ7G .active2,#mermaid-svg-ND7M8Okcfa2RNJ7G .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-ND7M8Okcfa2RNJ7G .activeText0,#mermaid-svg-ND7M8Okcfa2RNJ7G .activeText1,#mermaid-svg-ND7M8Okcfa2RNJ7G .activeText2,#mermaid-svg-ND7M8Okcfa2RNJ7G .activeText3{fill:#000 !important}#mermaid-svg-ND7M8Okcfa2RNJ7G .done0,#mermaid-svg-ND7M8Okcfa2RNJ7G .done1,#mermaid-svg-ND7M8Okcfa2RNJ7G .done2,#mermaid-svg-ND7M8Okcfa2RNJ7G .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-ND7M8Okcfa2RNJ7G .doneText0,#mermaid-svg-ND7M8Okcfa2RNJ7G .doneText1,#mermaid-svg-ND7M8Okcfa2RNJ7G .doneText2,#mermaid-svg-ND7M8Okcfa2RNJ7G .doneText3{fill:#000 !important}#mermaid-svg-ND7M8Okcfa2RNJ7G .crit0,#mermaid-svg-ND7M8Okcfa2RNJ7G .crit1,#mermaid-svg-ND7M8Okcfa2RNJ7G .crit2,#mermaid-svg-ND7M8Okcfa2RNJ7G .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-ND7M8Okcfa2RNJ7G .activeCrit0,#mermaid-svg-ND7M8Okcfa2RNJ7G .activeCrit1,#mermaid-svg-ND7M8Okcfa2RNJ7G .activeCrit2,#mermaid-svg-ND7M8Okcfa2RNJ7G .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-ND7M8Okcfa2RNJ7G .doneCrit0,#mermaid-svg-ND7M8Okcfa2RNJ7G .doneCrit1,#mermaid-svg-ND7M8Okcfa2RNJ7G .doneCrit2,#mermaid-svg-ND7M8Okcfa2RNJ7G .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-ND7M8Okcfa2RNJ7G .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-ND7M8Okcfa2RNJ7G .milestoneText{font-style:italic}#mermaid-svg-ND7M8Okcfa2RNJ7G .doneCritText0,#mermaid-svg-ND7M8Okcfa2RNJ7G .doneCritText1,#mermaid-svg-ND7M8Okcfa2RNJ7G .doneCritText2,#mermaid-svg-ND7M8Okcfa2RNJ7G .doneCritText3{fill:#000 !important}#mermaid-svg-ND7M8Okcfa2RNJ7G .activeCritText0,#mermaid-svg-ND7M8Okcfa2RNJ7G .activeCritText1,#mermaid-svg-ND7M8Okcfa2RNJ7G .activeCritText2,#mermaid-svg-ND7M8Okcfa2RNJ7G .activeCritText3{fill:#000 !important}#mermaid-svg-ND7M8Okcfa2RNJ7G .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-ND7M8Okcfa2RNJ7G g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-ND7M8Okcfa2RNJ7G g.classGroup text .title{font-weight:bolder}#mermaid-svg-ND7M8Okcfa2RNJ7G g.clickable{cursor:pointer}#mermaid-svg-ND7M8Okcfa2RNJ7G g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-ND7M8Okcfa2RNJ7G g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-ND7M8Okcfa2RNJ7G .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-ND7M8Okcfa2RNJ7G .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-ND7M8Okcfa2RNJ7G .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-ND7M8Okcfa2RNJ7G .dashed-line{stroke-dasharray:3}#mermaid-svg-ND7M8Okcfa2RNJ7G #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-ND7M8Okcfa2RNJ7G #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-ND7M8Okcfa2RNJ7G #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-ND7M8Okcfa2RNJ7G #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-ND7M8Okcfa2RNJ7G #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-ND7M8Okcfa2RNJ7G #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-ND7M8Okcfa2RNJ7G #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-ND7M8Okcfa2RNJ7G #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-ND7M8Okcfa2RNJ7G .commit-id,#mermaid-svg-ND7M8Okcfa2RNJ7G .commit-msg,#mermaid-svg-ND7M8Okcfa2RNJ7G .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-ND7M8Okcfa2RNJ7G .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-ND7M8Okcfa2RNJ7G .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-ND7M8Okcfa2RNJ7G g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-ND7M8Okcfa2RNJ7G g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-ND7M8Okcfa2RNJ7G g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-ND7M8Okcfa2RNJ7G g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-ND7M8Okcfa2RNJ7G g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-ND7M8Okcfa2RNJ7G g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-ND7M8Okcfa2RNJ7G .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-ND7M8Okcfa2RNJ7G .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-ND7M8Okcfa2RNJ7G .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-ND7M8Okcfa2RNJ7G .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-ND7M8Okcfa2RNJ7G .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-ND7M8Okcfa2RNJ7G .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-ND7M8Okcfa2RNJ7G .edgeLabel text{fill:#333}#mermaid-svg-ND7M8Okcfa2RNJ7G .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-ND7M8Okcfa2RNJ7G .node circle.state-start{fill:black;stroke:black}#mermaid-svg-ND7M8Okcfa2RNJ7G .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-ND7M8Okcfa2RNJ7G #statediagram-barbEnd{fill:#9370db}#mermaid-svg-ND7M8Okcfa2RNJ7G .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-ND7M8Okcfa2RNJ7G .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-ND7M8Okcfa2RNJ7G .statediagram-state .divider{stroke:#9370db}#mermaid-svg-ND7M8Okcfa2RNJ7G .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-ND7M8Okcfa2RNJ7G .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-ND7M8Okcfa2RNJ7G .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-ND7M8Okcfa2RNJ7G .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-ND7M8Okcfa2RNJ7G .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-ND7M8Okcfa2RNJ7G .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-ND7M8Okcfa2RNJ7G .note-edge{stroke-dasharray:5}#mermaid-svg-ND7M8Okcfa2RNJ7G .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-ND7M8Okcfa2RNJ7G .error-icon{fill:#522}#mermaid-svg-ND7M8Okcfa2RNJ7G .error-text{fill:#522;stroke:#522}#mermaid-svg-ND7M8Okcfa2RNJ7G .edge-thickness-normal{stroke-width:2px}#mermaid-svg-ND7M8Okcfa2RNJ7G .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-ND7M8Okcfa2RNJ7G .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-ND7M8Okcfa2RNJ7G .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-ND7M8Okcfa2RNJ7G .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-ND7M8Okcfa2RNJ7G .marker{fill:#333}#mermaid-svg-ND7M8Okcfa2RNJ7G .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;} #mermaid-svg-ND7M8Okcfa2RNJ7G {color: rgba(0, 0, 0, 0.75);font: ;} String StringCoding Charset StringEncoder CharsetEncoder 1.getBytes(charsetName) 2.encode 3.lookupCharset 4.Charset.forname 返回找到的Charset 5.根据Charset新建StringEncoder 6.创建CharsetEncoder 7.encode 8.encode 9.调用encodeLoop方法,是个抽象方法,具体交给每个字符集编码类实现 loop [真正的编码实现就在这里] 返回ByteBuffer 返回byte[] String StringCoding Charset StringEncoder CharsetEncoder

下面看看不同的字符集是如何将前面的字符串编码成 byte 数组的?
如字符串“I am 君山”的 char 数组为[ 49 20 61 6d 20 541b 5c71],下面把它按照不同的编码格式转化成相应的字节。(其实看我加粗的部分就行了)

  • 按照 ISO-8859-1 编码
    字符串“I am 君山”用 ISO-8859-1 编码,下面是编码结果:

    ​ ISO-8859-1 是单字节编码,中文“君山”被转化成值是 3f 的 byte。3f 也就是“?”字符,所以经常会出现中文变成“?”很可能就是错误的使用了 ISO-8859-1 这个编码导致的(这是不可逆的!)。中文字符经过 ISO-8859-1 编码会丢失信息,通常我们称之为“黑洞”,它会把不认识的字符吸收掉。由于现在大部分基础的 Java 框架或系统默认的字符集编码都是 ISO-8859-1,所以很容易出现乱码问题,后面将会分析不同的乱码形式是怎么出现的。

  • 按照 GB2312 编码

    5 个字符经过编码后仍然是 5 个字节,而汉字被编码成双字节,在第一节中介绍到 GB2312 只支持 6763 个汉字,所以并不是所有汉字都能够用 GB2312 编码。

    GB2312 字符集有一个 char 到 byte 的码表,不同的字符编码就是查这个码表找到与每个字符的对应的字节,然后拼装成 byte 数组。查表的公式(不用关心):

    c2b[c2bIndex[char >> 8] + (char & 0xff)]
    
  • 按照 GBK 编码

    你可能已经发现上图与 GB2312 编码的结果是一样的,没错 GBK 与 GB2312 编码结果是一样的,由此可以得出 GBK 编码是兼容 GB2312 编码的,它们的编码算法也是一样的不同的是它们的码表长度不一样,GBK 包含的汉字字符更多。所以只要是经过 GB2312 编码的汉字都可以用 GBK 进行解码,反过来则不然。

  • 按照 UTF-16 编码

    **用 UTF-16 编码将 char 数组放大了一倍,单字节范围内的字符,在高位补 0 变成两个字节,中文字符也变成两个字节。**从 UTF-16 编码规则来看,仅仅将字符的高位和地位进行拆分变成两个字节。特点是编码效率非常高,规则很简单,由于不同处理器对 2 字节处理方式不同,Big-endian(高位字节在前,低位字节在后)或 Little-endian(低位字节在前,高位字节在后)编码,所以在对一串字符串进行编码是需要指明到底是 Big-endian 还是 Little-endian,所以前面有两个字节用来保存 BYTE_ORDER_MARK 值,UTF-16 是用定长 16 位(2 字节)来表示的 UCS-2 或 Unicode 转换格式,通过代理对来访问 BMP 之外的字符编码。

    UTF-16 虽然编码效率很高,但是对单字节范围内字符也放大了一倍,这无形也浪费了存储空间,另外 UTF-16 采用顺序编码,不能对单个字符的编码值进行校验,如果中间的一个字符码值损坏,后面的所有码值都将受影响。

  • 按照 UTF-8 编码

    而 UTF-8 这些问题都不存在,UTF-8 对单字节范围内字符仍然用一个字节表示,对汉字采用三个字节表示(编码规则详见3.1)

    UTF-8 编码与 GBK 和 GB2312 不同,不用查码表,所以在编码效率上 UTF-8 的效率会更好,所以在存储中文字符时 UTF-8 编码比较理想。

    几种方式的比较

    • 后面四种编码格式都能处理中文字符
    • GB2312 与 GBK 编码规则类似,但是 GBK 范围更大,它能处理所有汉字字符
    • UTF-16 与 UTF-8 都是处理 Unicode 编码,UTF-16 适合在本地磁盘和内存之间使用,可以进行字符和字节之间快速切换,如 Java 的内存编码就是采用 UTF-16 编码。
    • UTF-8 更适合网络传输,对 ASCII 字符采用单字节存储,另外单个字符损坏也不会影响后面其它字符,在编码效率上介于 GBK 和 UTF-16 之间,所以 UTF-8 在编码效率上和编码安全性上做了平衡,是理想的中文编码方式。(网络传输容易损坏字节流,一旦字节流损坏将很难恢复,所以不能用UTF-16)

Java Web中的编解码

有 I/O 的地方就会涉及到编码,而大部分 I/O 引起的乱码都是网络 I/O,而数据经过网络传输都是以字节为单位的,所以所有的数据都必须能够被序列化为字节(在 Java 中数据被序列化必须继承 Serializable 接口。2.1有讲)

两个问题

1.一段文本的”实际大小“怎么计算?

  • 什么叫“实际大小”?举个例子,有个数字1234567(一百二十三万四千五百六十七),如果用UTF-8,占用 7 个 byte,采用 UTF-16 编码将会占用 14 个 byte,但是把它当成 int 型数字来存储只需要 4 个 byte 来存储。(那么你说它的实际大小是多少呢?

    所以看一段文本的大小,看字符本身的长度是没有意义的,即使是一样的字符采用不同的编码最终存储的大小也会不同,从字符到字节一定要看编码类型

  • 再提一下压缩:

    • 为了减少网络传输量,大家就要想办法压缩Cookie大小,但是即使使用不同的压缩算法,只会减少字符数,不会减少字节数
    • 所谓压缩就是将n个多字节的字符压成一个多字节字符,但也仅仅是减少了String.length()。
    • 压缩可以理解为一种另类的“编码”

2.输入汉字的时候,计算机是怎么表示的

​ 这里的表示可不是编码格式,我们知道计算机都是用0和1来表示的,像“淘宝”二字,十进制——[28120 23453],十六进制——[6bd8 5d9d]。而在Java中一个char是16bit=2字节,所以一个汉字=2字节的空间。

需要编码的地方

  1. 用户从浏览器端发起一个 HTTP 请求,需要存在编码的地方是 URL、Cookie、Parameter。

    #mermaid-svg-xeLrxRACrbZn6awG .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-xeLrxRACrbZn6awG .label text{fill:#333}#mermaid-svg-xeLrxRACrbZn6awG .node rect,#mermaid-svg-xeLrxRACrbZn6awG .node circle,#mermaid-svg-xeLrxRACrbZn6awG .node ellipse,#mermaid-svg-xeLrxRACrbZn6awG .node polygon,#mermaid-svg-xeLrxRACrbZn6awG .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-xeLrxRACrbZn6awG .node .label{text-align:center;fill:#333}#mermaid-svg-xeLrxRACrbZn6awG .node.clickable{cursor:pointer}#mermaid-svg-xeLrxRACrbZn6awG .arrowheadPath{fill:#333}#mermaid-svg-xeLrxRACrbZn6awG .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-xeLrxRACrbZn6awG .flowchart-link{stroke:#333;fill:none}#mermaid-svg-xeLrxRACrbZn6awG .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-xeLrxRACrbZn6awG .edgeLabel rect{opacity:0.9}#mermaid-svg-xeLrxRACrbZn6awG .edgeLabel span{color:#333}#mermaid-svg-xeLrxRACrbZn6awG .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-xeLrxRACrbZn6awG .cluster text{fill:#333}#mermaid-svg-xeLrxRACrbZn6awG div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-xeLrxRACrbZn6awG .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-xeLrxRACrbZn6awG text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-xeLrxRACrbZn6awG .actor-line{stroke:grey}#mermaid-svg-xeLrxRACrbZn6awG .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-xeLrxRACrbZn6awG .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-xeLrxRACrbZn6awG #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-xeLrxRACrbZn6awG .sequenceNumber{fill:#fff}#mermaid-svg-xeLrxRACrbZn6awG #sequencenumber{fill:#333}#mermaid-svg-xeLrxRACrbZn6awG #crosshead path{fill:#333;stroke:#333}#mermaid-svg-xeLrxRACrbZn6awG .messageText{fill:#333;stroke:#333}#mermaid-svg-xeLrxRACrbZn6awG .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-xeLrxRACrbZn6awG .labelText,#mermaid-svg-xeLrxRACrbZn6awG .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-xeLrxRACrbZn6awG .loopText,#mermaid-svg-xeLrxRACrbZn6awG .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-xeLrxRACrbZn6awG .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-xeLrxRACrbZn6awG .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-xeLrxRACrbZn6awG .noteText,#mermaid-svg-xeLrxRACrbZn6awG .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-xeLrxRACrbZn6awG .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-xeLrxRACrbZn6awG .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-xeLrxRACrbZn6awG .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-xeLrxRACrbZn6awG .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-xeLrxRACrbZn6awG .section{stroke:none;opacity:0.2}#mermaid-svg-xeLrxRACrbZn6awG .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-xeLrxRACrbZn6awG .section2{fill:#fff400}#mermaid-svg-xeLrxRACrbZn6awG .section1,#mermaid-svg-xeLrxRACrbZn6awG .section3{fill:#fff;opacity:0.2}#mermaid-svg-xeLrxRACrbZn6awG .sectionTitle0{fill:#333}#mermaid-svg-xeLrxRACrbZn6awG .sectionTitle1{fill:#333}#mermaid-svg-xeLrxRACrbZn6awG .sectionTitle2{fill:#333}#mermaid-svg-xeLrxRACrbZn6awG .sectionTitle3{fill:#333}#mermaid-svg-xeLrxRACrbZn6awG .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-xeLrxRACrbZn6awG .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-xeLrxRACrbZn6awG .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-xeLrxRACrbZn6awG .grid path{stroke-width:0}#mermaid-svg-xeLrxRACrbZn6awG .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-xeLrxRACrbZn6awG .task{stroke-width:2}#mermaid-svg-xeLrxRACrbZn6awG .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-xeLrxRACrbZn6awG .taskText:not([font-size]){font-size:11px}#mermaid-svg-xeLrxRACrbZn6awG .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-xeLrxRACrbZn6awG .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-xeLrxRACrbZn6awG .task.clickable{cursor:pointer}#mermaid-svg-xeLrxRACrbZn6awG .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-xeLrxRACrbZn6awG .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-xeLrxRACrbZn6awG .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-xeLrxRACrbZn6awG .taskText0,#mermaid-svg-xeLrxRACrbZn6awG .taskText1,#mermaid-svg-xeLrxRACrbZn6awG .taskText2,#mermaid-svg-xeLrxRACrbZn6awG .taskText3{fill:#fff}#mermaid-svg-xeLrxRACrbZn6awG .task0,#mermaid-svg-xeLrxRACrbZn6awG .task1,#mermaid-svg-xeLrxRACrbZn6awG .task2,#mermaid-svg-xeLrxRACrbZn6awG .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-xeLrxRACrbZn6awG .taskTextOutside0,#mermaid-svg-xeLrxRACrbZn6awG .taskTextOutside2{fill:#000}#mermaid-svg-xeLrxRACrbZn6awG .taskTextOutside1,#mermaid-svg-xeLrxRACrbZn6awG .taskTextOutside3{fill:#000}#mermaid-svg-xeLrxRACrbZn6awG .active0,#mermaid-svg-xeLrxRACrbZn6awG .active1,#mermaid-svg-xeLrxRACrbZn6awG .active2,#mermaid-svg-xeLrxRACrbZn6awG .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-xeLrxRACrbZn6awG .activeText0,#mermaid-svg-xeLrxRACrbZn6awG .activeText1,#mermaid-svg-xeLrxRACrbZn6awG .activeText2,#mermaid-svg-xeLrxRACrbZn6awG .activeText3{fill:#000 !important}#mermaid-svg-xeLrxRACrbZn6awG .done0,#mermaid-svg-xeLrxRACrbZn6awG .done1,#mermaid-svg-xeLrxRACrbZn6awG .done2,#mermaid-svg-xeLrxRACrbZn6awG .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-xeLrxRACrbZn6awG .doneText0,#mermaid-svg-xeLrxRACrbZn6awG .doneText1,#mermaid-svg-xeLrxRACrbZn6awG .doneText2,#mermaid-svg-xeLrxRACrbZn6awG .doneText3{fill:#000 !important}#mermaid-svg-xeLrxRACrbZn6awG .crit0,#mermaid-svg-xeLrxRACrbZn6awG .crit1,#mermaid-svg-xeLrxRACrbZn6awG .crit2,#mermaid-svg-xeLrxRACrbZn6awG .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-xeLrxRACrbZn6awG .activeCrit0,#mermaid-svg-xeLrxRACrbZn6awG .activeCrit1,#mermaid-svg-xeLrxRACrbZn6awG .activeCrit2,#mermaid-svg-xeLrxRACrbZn6awG .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-xeLrxRACrbZn6awG .doneCrit0,#mermaid-svg-xeLrxRACrbZn6awG .doneCrit1,#mermaid-svg-xeLrxRACrbZn6awG .doneCrit2,#mermaid-svg-xeLrxRACrbZn6awG .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-xeLrxRACrbZn6awG .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-xeLrxRACrbZn6awG .milestoneText{font-style:italic}#mermaid-svg-xeLrxRACrbZn6awG .doneCritText0,#mermaid-svg-xeLrxRACrbZn6awG .doneCritText1,#mermaid-svg-xeLrxRACrbZn6awG .doneCritText2,#mermaid-svg-xeLrxRACrbZn6awG .doneCritText3{fill:#000 !important}#mermaid-svg-xeLrxRACrbZn6awG .activeCritText0,#mermaid-svg-xeLrxRACrbZn6awG .activeCritText1,#mermaid-svg-xeLrxRACrbZn6awG .activeCritText2,#mermaid-svg-xeLrxRACrbZn6awG .activeCritText3{fill:#000 !important}#mermaid-svg-xeLrxRACrbZn6awG .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-xeLrxRACrbZn6awG g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-xeLrxRACrbZn6awG g.classGroup text .title{font-weight:bolder}#mermaid-svg-xeLrxRACrbZn6awG g.clickable{cursor:pointer}#mermaid-svg-xeLrxRACrbZn6awG g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-xeLrxRACrbZn6awG g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-xeLrxRACrbZn6awG .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-xeLrxRACrbZn6awG .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-xeLrxRACrbZn6awG .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-xeLrxRACrbZn6awG .dashed-line{stroke-dasharray:3}#mermaid-svg-xeLrxRACrbZn6awG #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-xeLrxRACrbZn6awG #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-xeLrxRACrbZn6awG #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-xeLrxRACrbZn6awG #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-xeLrxRACrbZn6awG #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-xeLrxRACrbZn6awG #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-xeLrxRACrbZn6awG #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-xeLrxRACrbZn6awG #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-xeLrxRACrbZn6awG .commit-id,#mermaid-svg-xeLrxRACrbZn6awG .commit-msg,#mermaid-svg-xeLrxRACrbZn6awG .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-xeLrxRACrbZn6awG .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-xeLrxRACrbZn6awG .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-xeLrxRACrbZn6awG g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-xeLrxRACrbZn6awG g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-xeLrxRACrbZn6awG g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-xeLrxRACrbZn6awG g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-xeLrxRACrbZn6awG g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-xeLrxRACrbZn6awG g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-xeLrxRACrbZn6awG .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-xeLrxRACrbZn6awG .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-xeLrxRACrbZn6awG .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-xeLrxRACrbZn6awG .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-xeLrxRACrbZn6awG .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-xeLrxRACrbZn6awG .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-xeLrxRACrbZn6awG .edgeLabel text{fill:#333}#mermaid-svg-xeLrxRACrbZn6awG .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-xeLrxRACrbZn6awG .node circle.state-start{fill:black;stroke:black}#mermaid-svg-xeLrxRACrbZn6awG .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-xeLrxRACrbZn6awG #statediagram-barbEnd{fill:#9370db}#mermaid-svg-xeLrxRACrbZn6awG .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-xeLrxRACrbZn6awG .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-xeLrxRACrbZn6awG .statediagram-state .divider{stroke:#9370db}#mermaid-svg-xeLrxRACrbZn6awG .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-xeLrxRACrbZn6awG .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-xeLrxRACrbZn6awG .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-xeLrxRACrbZn6awG .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-xeLrxRACrbZn6awG .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-xeLrxRACrbZn6awG .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-xeLrxRACrbZn6awG .note-edge{stroke-dasharray:5}#mermaid-svg-xeLrxRACrbZn6awG .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-xeLrxRACrbZn6awG .error-icon{fill:#522}#mermaid-svg-xeLrxRACrbZn6awG .error-text{fill:#522;stroke:#522}#mermaid-svg-xeLrxRACrbZn6awG .edge-thickness-normal{stroke-width:2px}#mermaid-svg-xeLrxRACrbZn6awG .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-xeLrxRACrbZn6awG .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-xeLrxRACrbZn6awG .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-xeLrxRACrbZn6awG .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-xeLrxRACrbZn6awG .marker{fill:#333}#mermaid-svg-xeLrxRACrbZn6awG .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;} #mermaid-svg-xeLrxRACrbZn6awG {color: rgba(0, 0, 0, 0.75);font: ;}

    浏览器
    URL+Cookie+Parameter
    请求
    编码
    Socket流
    服务器

  2. 服务器端接受到 HTTP 请求后要解析 HTTP 协议,其中 URI、Cookie 和 (POST )表单参数需要解码,服务器端可能还需要读取数据库中的数据,本地或网络中其它地方的文本文件,这些数据都可能存在编码问题,当 Servlet 处理完所有请求的数据后,需要将这些数据再编码通过 Socket 发送到用户请求的浏览器里,再经过浏览器解码成为文本

    #mermaid-svg-d8Zo8weIGR1uItYP .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-d8Zo8weIGR1uItYP .label text{fill:#333}#mermaid-svg-d8Zo8weIGR1uItYP .node rect,#mermaid-svg-d8Zo8weIGR1uItYP .node circle,#mermaid-svg-d8Zo8weIGR1uItYP .node ellipse,#mermaid-svg-d8Zo8weIGR1uItYP .node polygon,#mermaid-svg-d8Zo8weIGR1uItYP .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-d8Zo8weIGR1uItYP .node .label{text-align:center;fill:#333}#mermaid-svg-d8Zo8weIGR1uItYP .node.clickable{cursor:pointer}#mermaid-svg-d8Zo8weIGR1uItYP .arrowheadPath{fill:#333}#mermaid-svg-d8Zo8weIGR1uItYP .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-d8Zo8weIGR1uItYP .flowchart-link{stroke:#333;fill:none}#mermaid-svg-d8Zo8weIGR1uItYP .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-d8Zo8weIGR1uItYP .edgeLabel rect{opacity:0.9}#mermaid-svg-d8Zo8weIGR1uItYP .edgeLabel span{color:#333}#mermaid-svg-d8Zo8weIGR1uItYP .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-d8Zo8weIGR1uItYP .cluster text{fill:#333}#mermaid-svg-d8Zo8weIGR1uItYP div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-d8Zo8weIGR1uItYP .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-d8Zo8weIGR1uItYP text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-d8Zo8weIGR1uItYP .actor-line{stroke:grey}#mermaid-svg-d8Zo8weIGR1uItYP .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-d8Zo8weIGR1uItYP .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-d8Zo8weIGR1uItYP #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-d8Zo8weIGR1uItYP .sequenceNumber{fill:#fff}#mermaid-svg-d8Zo8weIGR1uItYP #sequencenumber{fill:#333}#mermaid-svg-d8Zo8weIGR1uItYP #crosshead path{fill:#333;stroke:#333}#mermaid-svg-d8Zo8weIGR1uItYP .messageText{fill:#333;stroke:#333}#mermaid-svg-d8Zo8weIGR1uItYP .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-d8Zo8weIGR1uItYP .labelText,#mermaid-svg-d8Zo8weIGR1uItYP .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-d8Zo8weIGR1uItYP .loopText,#mermaid-svg-d8Zo8weIGR1uItYP .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-d8Zo8weIGR1uItYP .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-d8Zo8weIGR1uItYP .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-d8Zo8weIGR1uItYP .noteText,#mermaid-svg-d8Zo8weIGR1uItYP .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-d8Zo8weIGR1uItYP .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-d8Zo8weIGR1uItYP .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-d8Zo8weIGR1uItYP .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-d8Zo8weIGR1uItYP .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-d8Zo8weIGR1uItYP .section{stroke:none;opacity:0.2}#mermaid-svg-d8Zo8weIGR1uItYP .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-d8Zo8weIGR1uItYP .section2{fill:#fff400}#mermaid-svg-d8Zo8weIGR1uItYP .section1,#mermaid-svg-d8Zo8weIGR1uItYP .section3{fill:#fff;opacity:0.2}#mermaid-svg-d8Zo8weIGR1uItYP .sectionTitle0{fill:#333}#mermaid-svg-d8Zo8weIGR1uItYP .sectionTitle1{fill:#333}#mermaid-svg-d8Zo8weIGR1uItYP .sectionTitle2{fill:#333}#mermaid-svg-d8Zo8weIGR1uItYP .sectionTitle3{fill:#333}#mermaid-svg-d8Zo8weIGR1uItYP .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-d8Zo8weIGR1uItYP .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-d8Zo8weIGR1uItYP .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-d8Zo8weIGR1uItYP .grid path{stroke-width:0}#mermaid-svg-d8Zo8weIGR1uItYP .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-d8Zo8weIGR1uItYP .task{stroke-width:2}#mermaid-svg-d8Zo8weIGR1uItYP .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-d8Zo8weIGR1uItYP .taskText:not([font-size]){font-size:11px}#mermaid-svg-d8Zo8weIGR1uItYP .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-d8Zo8weIGR1uItYP .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-d8Zo8weIGR1uItYP .task.clickable{cursor:pointer}#mermaid-svg-d8Zo8weIGR1uItYP .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-d8Zo8weIGR1uItYP .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-d8Zo8weIGR1uItYP .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-d8Zo8weIGR1uItYP .taskText0,#mermaid-svg-d8Zo8weIGR1uItYP .taskText1,#mermaid-svg-d8Zo8weIGR1uItYP .taskText2,#mermaid-svg-d8Zo8weIGR1uItYP .taskText3{fill:#fff}#mermaid-svg-d8Zo8weIGR1uItYP .task0,#mermaid-svg-d8Zo8weIGR1uItYP .task1,#mermaid-svg-d8Zo8weIGR1uItYP .task2,#mermaid-svg-d8Zo8weIGR1uItYP .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-d8Zo8weIGR1uItYP .taskTextOutside0,#mermaid-svg-d8Zo8weIGR1uItYP .taskTextOutside2{fill:#000}#mermaid-svg-d8Zo8weIGR1uItYP .taskTextOutside1,#mermaid-svg-d8Zo8weIGR1uItYP .taskTextOutside3{fill:#000}#mermaid-svg-d8Zo8weIGR1uItYP .active0,#mermaid-svg-d8Zo8weIGR1uItYP .active1,#mermaid-svg-d8Zo8weIGR1uItYP .active2,#mermaid-svg-d8Zo8weIGR1uItYP .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-d8Zo8weIGR1uItYP .activeText0,#mermaid-svg-d8Zo8weIGR1uItYP .activeText1,#mermaid-svg-d8Zo8weIGR1uItYP .activeText2,#mermaid-svg-d8Zo8weIGR1uItYP .activeText3{fill:#000 !important}#mermaid-svg-d8Zo8weIGR1uItYP .done0,#mermaid-svg-d8Zo8weIGR1uItYP .done1,#mermaid-svg-d8Zo8weIGR1uItYP .done2,#mermaid-svg-d8Zo8weIGR1uItYP .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-d8Zo8weIGR1uItYP .doneText0,#mermaid-svg-d8Zo8weIGR1uItYP .doneText1,#mermaid-svg-d8Zo8weIGR1uItYP .doneText2,#mermaid-svg-d8Zo8weIGR1uItYP .doneText3{fill:#000 !important}#mermaid-svg-d8Zo8weIGR1uItYP .crit0,#mermaid-svg-d8Zo8weIGR1uItYP .crit1,#mermaid-svg-d8Zo8weIGR1uItYP .crit2,#mermaid-svg-d8Zo8weIGR1uItYP .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-d8Zo8weIGR1uItYP .activeCrit0,#mermaid-svg-d8Zo8weIGR1uItYP .activeCrit1,#mermaid-svg-d8Zo8weIGR1uItYP .activeCrit2,#mermaid-svg-d8Zo8weIGR1uItYP .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-d8Zo8weIGR1uItYP .doneCrit0,#mermaid-svg-d8Zo8weIGR1uItYP .doneCrit1,#mermaid-svg-d8Zo8weIGR1uItYP .doneCrit2,#mermaid-svg-d8Zo8weIGR1uItYP .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-d8Zo8weIGR1uItYP .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-d8Zo8weIGR1uItYP .milestoneText{font-style:italic}#mermaid-svg-d8Zo8weIGR1uItYP .doneCritText0,#mermaid-svg-d8Zo8weIGR1uItYP .doneCritText1,#mermaid-svg-d8Zo8weIGR1uItYP .doneCritText2,#mermaid-svg-d8Zo8weIGR1uItYP .doneCritText3{fill:#000 !important}#mermaid-svg-d8Zo8weIGR1uItYP .activeCritText0,#mermaid-svg-d8Zo8weIGR1uItYP .activeCritText1,#mermaid-svg-d8Zo8weIGR1uItYP .activeCritText2,#mermaid-svg-d8Zo8weIGR1uItYP .activeCritText3{fill:#000 !important}#mermaid-svg-d8Zo8weIGR1uItYP .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-d8Zo8weIGR1uItYP g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-d8Zo8weIGR1uItYP g.classGroup text .title{font-weight:bolder}#mermaid-svg-d8Zo8weIGR1uItYP g.clickable{cursor:pointer}#mermaid-svg-d8Zo8weIGR1uItYP g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-d8Zo8weIGR1uItYP g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-d8Zo8weIGR1uItYP .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-d8Zo8weIGR1uItYP .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-d8Zo8weIGR1uItYP .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-d8Zo8weIGR1uItYP .dashed-line{stroke-dasharray:3}#mermaid-svg-d8Zo8weIGR1uItYP #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-d8Zo8weIGR1uItYP #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-d8Zo8weIGR1uItYP #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-d8Zo8weIGR1uItYP #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-d8Zo8weIGR1uItYP #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-d8Zo8weIGR1uItYP #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-d8Zo8weIGR1uItYP #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-d8Zo8weIGR1uItYP #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-d8Zo8weIGR1uItYP .commit-id,#mermaid-svg-d8Zo8weIGR1uItYP .commit-msg,#mermaid-svg-d8Zo8weIGR1uItYP .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-d8Zo8weIGR1uItYP .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-d8Zo8weIGR1uItYP .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-d8Zo8weIGR1uItYP g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-d8Zo8weIGR1uItYP g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-d8Zo8weIGR1uItYP g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-d8Zo8weIGR1uItYP g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-d8Zo8weIGR1uItYP g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-d8Zo8weIGR1uItYP g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-d8Zo8weIGR1uItYP .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-d8Zo8weIGR1uItYP .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-d8Zo8weIGR1uItYP .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-d8Zo8weIGR1uItYP .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-d8Zo8weIGR1uItYP .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-d8Zo8weIGR1uItYP .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-d8Zo8weIGR1uItYP .edgeLabel text{fill:#333}#mermaid-svg-d8Zo8weIGR1uItYP .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-d8Zo8weIGR1uItYP .node circle.state-start{fill:black;stroke:black}#mermaid-svg-d8Zo8weIGR1uItYP .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-d8Zo8weIGR1uItYP #statediagram-barbEnd{fill:#9370db}#mermaid-svg-d8Zo8weIGR1uItYP .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-d8Zo8weIGR1uItYP .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-d8Zo8weIGR1uItYP .statediagram-state .divider{stroke:#9370db}#mermaid-svg-d8Zo8weIGR1uItYP .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-d8Zo8weIGR1uItYP .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-d8Zo8weIGR1uItYP .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-d8Zo8weIGR1uItYP .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-d8Zo8weIGR1uItYP .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-d8Zo8weIGR1uItYP .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-d8Zo8weIGR1uItYP .note-edge{stroke-dasharray:5}#mermaid-svg-d8Zo8weIGR1uItYP .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-d8Zo8weIGR1uItYP .error-icon{fill:#522}#mermaid-svg-d8Zo8weIGR1uItYP .error-text{fill:#522;stroke:#522}#mermaid-svg-d8Zo8weIGR1uItYP .edge-thickness-normal{stroke-width:2px}#mermaid-svg-d8Zo8weIGR1uItYP .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-d8Zo8weIGR1uItYP .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-d8Zo8weIGR1uItYP .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-d8Zo8weIGR1uItYP .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-d8Zo8weIGR1uItYP .marker{fill:#333}#mermaid-svg-d8Zo8weIGR1uItYP .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;} #mermaid-svg-d8Zo8weIGR1uItYP {color: rgba(0, 0, 0, 0.75);font: ;}

    服务器
    操作数据库+算法
    服务器Servlet
    解码
    处理过的数据
    编码
    URL+Cookie+Parameter
    Socket流

这些过程如下图所示:

URL

  • 编码

用户提交一个URL,它可能存在中文,因此不能回避编码。

先复习一下URL的组成:

#mermaid-svg-lHKqUEiQiFGNwknJ .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-lHKqUEiQiFGNwknJ .label text{fill:#333}#mermaid-svg-lHKqUEiQiFGNwknJ .node rect,#mermaid-svg-lHKqUEiQiFGNwknJ .node circle,#mermaid-svg-lHKqUEiQiFGNwknJ .node ellipse,#mermaid-svg-lHKqUEiQiFGNwknJ .node polygon,#mermaid-svg-lHKqUEiQiFGNwknJ .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-lHKqUEiQiFGNwknJ .node .label{text-align:center;fill:#333}#mermaid-svg-lHKqUEiQiFGNwknJ .node.clickable{cursor:pointer}#mermaid-svg-lHKqUEiQiFGNwknJ .arrowheadPath{fill:#333}#mermaid-svg-lHKqUEiQiFGNwknJ .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-lHKqUEiQiFGNwknJ .flowchart-link{stroke:#333;fill:none}#mermaid-svg-lHKqUEiQiFGNwknJ .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-lHKqUEiQiFGNwknJ .edgeLabel rect{opacity:0.9}#mermaid-svg-lHKqUEiQiFGNwknJ .edgeLabel span{color:#333}#mermaid-svg-lHKqUEiQiFGNwknJ .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-lHKqUEiQiFGNwknJ .cluster text{fill:#333}#mermaid-svg-lHKqUEiQiFGNwknJ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-lHKqUEiQiFGNwknJ .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-lHKqUEiQiFGNwknJ text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-lHKqUEiQiFGNwknJ .actor-line{stroke:grey}#mermaid-svg-lHKqUEiQiFGNwknJ .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-lHKqUEiQiFGNwknJ .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-lHKqUEiQiFGNwknJ #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-lHKqUEiQiFGNwknJ .sequenceNumber{fill:#fff}#mermaid-svg-lHKqUEiQiFGNwknJ #sequencenumber{fill:#333}#mermaid-svg-lHKqUEiQiFGNwknJ #crosshead path{fill:#333;stroke:#333}#mermaid-svg-lHKqUEiQiFGNwknJ .messageText{fill:#333;stroke:#333}#mermaid-svg-lHKqUEiQiFGNwknJ .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-lHKqUEiQiFGNwknJ .labelText,#mermaid-svg-lHKqUEiQiFGNwknJ .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-lHKqUEiQiFGNwknJ .loopText,#mermaid-svg-lHKqUEiQiFGNwknJ .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-lHKqUEiQiFGNwknJ .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-lHKqUEiQiFGNwknJ .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-lHKqUEiQiFGNwknJ .noteText,#mermaid-svg-lHKqUEiQiFGNwknJ .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-lHKqUEiQiFGNwknJ .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-lHKqUEiQiFGNwknJ .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-lHKqUEiQiFGNwknJ .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-lHKqUEiQiFGNwknJ .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-lHKqUEiQiFGNwknJ .section{stroke:none;opacity:0.2}#mermaid-svg-lHKqUEiQiFGNwknJ .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-lHKqUEiQiFGNwknJ .section2{fill:#fff400}#mermaid-svg-lHKqUEiQiFGNwknJ .section1,#mermaid-svg-lHKqUEiQiFGNwknJ .section3{fill:#fff;opacity:0.2}#mermaid-svg-lHKqUEiQiFGNwknJ .sectionTitle0{fill:#333}#mermaid-svg-lHKqUEiQiFGNwknJ .sectionTitle1{fill:#333}#mermaid-svg-lHKqUEiQiFGNwknJ .sectionTitle2{fill:#333}#mermaid-svg-lHKqUEiQiFGNwknJ .sectionTitle3{fill:#333}#mermaid-svg-lHKqUEiQiFGNwknJ .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-lHKqUEiQiFGNwknJ .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-lHKqUEiQiFGNwknJ .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-lHKqUEiQiFGNwknJ .grid path{stroke-width:0}#mermaid-svg-lHKqUEiQiFGNwknJ .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-lHKqUEiQiFGNwknJ .task{stroke-width:2}#mermaid-svg-lHKqUEiQiFGNwknJ .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-lHKqUEiQiFGNwknJ .taskText:not([font-size]){font-size:11px}#mermaid-svg-lHKqUEiQiFGNwknJ .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-lHKqUEiQiFGNwknJ .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-lHKqUEiQiFGNwknJ .task.clickable{cursor:pointer}#mermaid-svg-lHKqUEiQiFGNwknJ .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-lHKqUEiQiFGNwknJ .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-lHKqUEiQiFGNwknJ .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-lHKqUEiQiFGNwknJ .taskText0,#mermaid-svg-lHKqUEiQiFGNwknJ .taskText1,#mermaid-svg-lHKqUEiQiFGNwknJ .taskText2,#mermaid-svg-lHKqUEiQiFGNwknJ .taskText3{fill:#fff}#mermaid-svg-lHKqUEiQiFGNwknJ .task0,#mermaid-svg-lHKqUEiQiFGNwknJ .task1,#mermaid-svg-lHKqUEiQiFGNwknJ .task2,#mermaid-svg-lHKqUEiQiFGNwknJ .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-lHKqUEiQiFGNwknJ .taskTextOutside0,#mermaid-svg-lHKqUEiQiFGNwknJ .taskTextOutside2{fill:#000}#mermaid-svg-lHKqUEiQiFGNwknJ .taskTextOutside1,#mermaid-svg-lHKqUEiQiFGNwknJ .taskTextOutside3{fill:#000}#mermaid-svg-lHKqUEiQiFGNwknJ .active0,#mermaid-svg-lHKqUEiQiFGNwknJ .active1,#mermaid-svg-lHKqUEiQiFGNwknJ .active2,#mermaid-svg-lHKqUEiQiFGNwknJ .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-lHKqUEiQiFGNwknJ .activeText0,#mermaid-svg-lHKqUEiQiFGNwknJ .activeText1,#mermaid-svg-lHKqUEiQiFGNwknJ .activeText2,#mermaid-svg-lHKqUEiQiFGNwknJ .activeText3{fill:#000 !important}#mermaid-svg-lHKqUEiQiFGNwknJ .done0,#mermaid-svg-lHKqUEiQiFGNwknJ .done1,#mermaid-svg-lHKqUEiQiFGNwknJ .done2,#mermaid-svg-lHKqUEiQiFGNwknJ .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-lHKqUEiQiFGNwknJ .doneText0,#mermaid-svg-lHKqUEiQiFGNwknJ .doneText1,#mermaid-svg-lHKqUEiQiFGNwknJ .doneText2,#mermaid-svg-lHKqUEiQiFGNwknJ .doneText3{fill:#000 !important}#mermaid-svg-lHKqUEiQiFGNwknJ .crit0,#mermaid-svg-lHKqUEiQiFGNwknJ .crit1,#mermaid-svg-lHKqUEiQiFGNwknJ .crit2,#mermaid-svg-lHKqUEiQiFGNwknJ .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-lHKqUEiQiFGNwknJ .activeCrit0,#mermaid-svg-lHKqUEiQiFGNwknJ .activeCrit1,#mermaid-svg-lHKqUEiQiFGNwknJ .activeCrit2,#mermaid-svg-lHKqUEiQiFGNwknJ .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-lHKqUEiQiFGNwknJ .doneCrit0,#mermaid-svg-lHKqUEiQiFGNwknJ .doneCrit1,#mermaid-svg-lHKqUEiQiFGNwknJ .doneCrit2,#mermaid-svg-lHKqUEiQiFGNwknJ .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-lHKqUEiQiFGNwknJ .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-lHKqUEiQiFGNwknJ .milestoneText{font-style:italic}#mermaid-svg-lHKqUEiQiFGNwknJ .doneCritText0,#mermaid-svg-lHKqUEiQiFGNwknJ .doneCritText1,#mermaid-svg-lHKqUEiQiFGNwknJ .doneCritText2,#mermaid-svg-lHKqUEiQiFGNwknJ .doneCritText3{fill:#000 !important}#mermaid-svg-lHKqUEiQiFGNwknJ .activeCritText0,#mermaid-svg-lHKqUEiQiFGNwknJ .activeCritText1,#mermaid-svg-lHKqUEiQiFGNwknJ .activeCritText2,#mermaid-svg-lHKqUEiQiFGNwknJ .activeCritText3{fill:#000 !important}#mermaid-svg-lHKqUEiQiFGNwknJ .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-lHKqUEiQiFGNwknJ g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-lHKqUEiQiFGNwknJ g.classGroup text .title{font-weight:bolder}#mermaid-svg-lHKqUEiQiFGNwknJ g.clickable{cursor:pointer}#mermaid-svg-lHKqUEiQiFGNwknJ g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-lHKqUEiQiFGNwknJ g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-lHKqUEiQiFGNwknJ .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-lHKqUEiQiFGNwknJ .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-lHKqUEiQiFGNwknJ .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-lHKqUEiQiFGNwknJ .dashed-line{stroke-dasharray:3}#mermaid-svg-lHKqUEiQiFGNwknJ #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-lHKqUEiQiFGNwknJ #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-lHKqUEiQiFGNwknJ #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-lHKqUEiQiFGNwknJ #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-lHKqUEiQiFGNwknJ #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-lHKqUEiQiFGNwknJ #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-lHKqUEiQiFGNwknJ #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-lHKqUEiQiFGNwknJ #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-lHKqUEiQiFGNwknJ .commit-id,#mermaid-svg-lHKqUEiQiFGNwknJ .commit-msg,#mermaid-svg-lHKqUEiQiFGNwknJ .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-lHKqUEiQiFGNwknJ .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-lHKqUEiQiFGNwknJ .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-lHKqUEiQiFGNwknJ g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-lHKqUEiQiFGNwknJ g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-lHKqUEiQiFGNwknJ g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-lHKqUEiQiFGNwknJ g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-lHKqUEiQiFGNwknJ g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-lHKqUEiQiFGNwknJ g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-lHKqUEiQiFGNwknJ .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-lHKqUEiQiFGNwknJ .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-lHKqUEiQiFGNwknJ .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-lHKqUEiQiFGNwknJ .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-lHKqUEiQiFGNwknJ .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-lHKqUEiQiFGNwknJ .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-lHKqUEiQiFGNwknJ .edgeLabel text{fill:#333}#mermaid-svg-lHKqUEiQiFGNwknJ .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-lHKqUEiQiFGNwknJ .node circle.state-start{fill:black;stroke:black}#mermaid-svg-lHKqUEiQiFGNwknJ .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-lHKqUEiQiFGNwknJ #statediagram-barbEnd{fill:#9370db}#mermaid-svg-lHKqUEiQiFGNwknJ .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-lHKqUEiQiFGNwknJ .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-lHKqUEiQiFGNwknJ .statediagram-state .divider{stroke:#9370db}#mermaid-svg-lHKqUEiQiFGNwknJ .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-lHKqUEiQiFGNwknJ .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-lHKqUEiQiFGNwknJ .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-lHKqUEiQiFGNwknJ .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-lHKqUEiQiFGNwknJ .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-lHKqUEiQiFGNwknJ .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-lHKqUEiQiFGNwknJ .note-edge{stroke-dasharray:5}#mermaid-svg-lHKqUEiQiFGNwknJ .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-lHKqUEiQiFGNwknJ .error-icon{fill:#522}#mermaid-svg-lHKqUEiQiFGNwknJ .error-text{fill:#522;stroke:#522}#mermaid-svg-lHKqUEiQiFGNwknJ .edge-thickness-normal{stroke-width:2px}#mermaid-svg-lHKqUEiQiFGNwknJ .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-lHKqUEiQiFGNwknJ .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-lHKqUEiQiFGNwknJ .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-lHKqUEiQiFGNwknJ .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-lHKqUEiQiFGNwknJ .marker{fill:#333}#mermaid-svg-lHKqUEiQiFGNwknJ .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;} #mermaid-svg-lHKqUEiQiFGNwknJ {color: rgba(0, 0, 0, 0.75);font: ;}

完整的URL
Http://localhost:8080/examples/servlets/servlet/亚索?author=亚索
#mermaid-svg-XZ5PMftJUfoIkLu5 .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-XZ5PMftJUfoIkLu5 .label text{fill:#333}#mermaid-svg-XZ5PMftJUfoIkLu5 .node rect,#mermaid-svg-XZ5PMftJUfoIkLu5 .node circle,#mermaid-svg-XZ5PMftJUfoIkLu5 .node ellipse,#mermaid-svg-XZ5PMftJUfoIkLu5 .node polygon,#mermaid-svg-XZ5PMftJUfoIkLu5 .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-XZ5PMftJUfoIkLu5 .node .label{text-align:center;fill:#333}#mermaid-svg-XZ5PMftJUfoIkLu5 .node.clickable{cursor:pointer}#mermaid-svg-XZ5PMftJUfoIkLu5 .arrowheadPath{fill:#333}#mermaid-svg-XZ5PMftJUfoIkLu5 .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-XZ5PMftJUfoIkLu5 .flowchart-link{stroke:#333;fill:none}#mermaid-svg-XZ5PMftJUfoIkLu5 .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-XZ5PMftJUfoIkLu5 .edgeLabel rect{opacity:0.9}#mermaid-svg-XZ5PMftJUfoIkLu5 .edgeLabel span{color:#333}#mermaid-svg-XZ5PMftJUfoIkLu5 .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-XZ5PMftJUfoIkLu5 .cluster text{fill:#333}#mermaid-svg-XZ5PMftJUfoIkLu5 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-XZ5PMftJUfoIkLu5 .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-XZ5PMftJUfoIkLu5 text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-XZ5PMftJUfoIkLu5 .actor-line{stroke:grey}#mermaid-svg-XZ5PMftJUfoIkLu5 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-XZ5PMftJUfoIkLu5 .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-XZ5PMftJUfoIkLu5 #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-XZ5PMftJUfoIkLu5 .sequenceNumber{fill:#fff}#mermaid-svg-XZ5PMftJUfoIkLu5 #sequencenumber{fill:#333}#mermaid-svg-XZ5PMftJUfoIkLu5 #crosshead path{fill:#333;stroke:#333}#mermaid-svg-XZ5PMftJUfoIkLu5 .messageText{fill:#333;stroke:#333}#mermaid-svg-XZ5PMftJUfoIkLu5 .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-XZ5PMftJUfoIkLu5 .labelText,#mermaid-svg-XZ5PMftJUfoIkLu5 .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-XZ5PMftJUfoIkLu5 .loopText,#mermaid-svg-XZ5PMftJUfoIkLu5 .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-XZ5PMftJUfoIkLu5 .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-XZ5PMftJUfoIkLu5 .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-XZ5PMftJUfoIkLu5 .noteText,#mermaid-svg-XZ5PMftJUfoIkLu5 .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-XZ5PMftJUfoIkLu5 .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-XZ5PMftJUfoIkLu5 .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-XZ5PMftJUfoIkLu5 .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-XZ5PMftJUfoIkLu5 .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-XZ5PMftJUfoIkLu5 .section{stroke:none;opacity:0.2}#mermaid-svg-XZ5PMftJUfoIkLu5 .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-XZ5PMftJUfoIkLu5 .section2{fill:#fff400}#mermaid-svg-XZ5PMftJUfoIkLu5 .section1,#mermaid-svg-XZ5PMftJUfoIkLu5 .section3{fill:#fff;opacity:0.2}#mermaid-svg-XZ5PMftJUfoIkLu5 .sectionTitle0{fill:#333}#mermaid-svg-XZ5PMftJUfoIkLu5 .sectionTitle1{fill:#333}#mermaid-svg-XZ5PMftJUfoIkLu5 .sectionTitle2{fill:#333}#mermaid-svg-XZ5PMftJUfoIkLu5 .sectionTitle3{fill:#333}#mermaid-svg-XZ5PMftJUfoIkLu5 .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-XZ5PMftJUfoIkLu5 .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-XZ5PMftJUfoIkLu5 .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-XZ5PMftJUfoIkLu5 .grid path{stroke-width:0}#mermaid-svg-XZ5PMftJUfoIkLu5 .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-XZ5PMftJUfoIkLu5 .task{stroke-width:2}#mermaid-svg-XZ5PMftJUfoIkLu5 .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-XZ5PMftJUfoIkLu5 .taskText:not([font-size]){font-size:11px}#mermaid-svg-XZ5PMftJUfoIkLu5 .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-XZ5PMftJUfoIkLu5 .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-XZ5PMftJUfoIkLu5 .task.clickable{cursor:pointer}#mermaid-svg-XZ5PMftJUfoIkLu5 .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-XZ5PMftJUfoIkLu5 .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-XZ5PMftJUfoIkLu5 .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-XZ5PMftJUfoIkLu5 .taskText0,#mermaid-svg-XZ5PMftJUfoIkLu5 .taskText1,#mermaid-svg-XZ5PMftJUfoIkLu5 .taskText2,#mermaid-svg-XZ5PMftJUfoIkLu5 .taskText3{fill:#fff}#mermaid-svg-XZ5PMftJUfoIkLu5 .task0,#mermaid-svg-XZ5PMftJUfoIkLu5 .task1,#mermaid-svg-XZ5PMftJUfoIkLu5 .task2,#mermaid-svg-XZ5PMftJUfoIkLu5 .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-XZ5PMftJUfoIkLu5 .taskTextOutside0,#mermaid-svg-XZ5PMftJUfoIkLu5 .taskTextOutside2{fill:#000}#mermaid-svg-XZ5PMftJUfoIkLu5 .taskTextOutside1,#mermaid-svg-XZ5PMftJUfoIkLu5 .taskTextOutside3{fill:#000}#mermaid-svg-XZ5PMftJUfoIkLu5 .active0,#mermaid-svg-XZ5PMftJUfoIkLu5 .active1,#mermaid-svg-XZ5PMftJUfoIkLu5 .active2,#mermaid-svg-XZ5PMftJUfoIkLu5 .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-XZ5PMftJUfoIkLu5 .activeText0,#mermaid-svg-XZ5PMftJUfoIkLu5 .activeText1,#mermaid-svg-XZ5PMftJUfoIkLu5 .activeText2,#mermaid-svg-XZ5PMftJUfoIkLu5 .activeText3{fill:#000 !important}#mermaid-svg-XZ5PMftJUfoIkLu5 .done0,#mermaid-svg-XZ5PMftJUfoIkLu5 .done1,#mermaid-svg-XZ5PMftJUfoIkLu5 .done2,#mermaid-svg-XZ5PMftJUfoIkLu5 .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-XZ5PMftJUfoIkLu5 .doneText0,#mermaid-svg-XZ5PMftJUfoIkLu5 .doneText1,#mermaid-svg-XZ5PMftJUfoIkLu5 .doneText2,#mermaid-svg-XZ5PMftJUfoIkLu5 .doneText3{fill:#000 !important}#mermaid-svg-XZ5PMftJUfoIkLu5 .crit0,#mermaid-svg-XZ5PMftJUfoIkLu5 .crit1,#mermaid-svg-XZ5PMftJUfoIkLu5 .crit2,#mermaid-svg-XZ5PMftJUfoIkLu5 .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-XZ5PMftJUfoIkLu5 .activeCrit0,#mermaid-svg-XZ5PMftJUfoIkLu5 .activeCrit1,#mermaid-svg-XZ5PMftJUfoIkLu5 .activeCrit2,#mermaid-svg-XZ5PMftJUfoIkLu5 .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-XZ5PMftJUfoIkLu5 .doneCrit0,#mermaid-svg-XZ5PMftJUfoIkLu5 .doneCrit1,#mermaid-svg-XZ5PMftJUfoIkLu5 .doneCrit2,#mermaid-svg-XZ5PMftJUfoIkLu5 .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-XZ5PMftJUfoIkLu5 .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-XZ5PMftJUfoIkLu5 .milestoneText{font-style:italic}#mermaid-svg-XZ5PMftJUfoIkLu5 .doneCritText0,#mermaid-svg-XZ5PMftJUfoIkLu5 .doneCritText1,#mermaid-svg-XZ5PMftJUfoIkLu5 .doneCritText2,#mermaid-svg-XZ5PMftJUfoIkLu5 .doneCritText3{fill:#000 !important}#mermaid-svg-XZ5PMftJUfoIkLu5 .activeCritText0,#mermaid-svg-XZ5PMftJUfoIkLu5 .activeCritText1,#mermaid-svg-XZ5PMftJUfoIkLu5 .activeCritText2,#mermaid-svg-XZ5PMftJUfoIkLu5 .activeCritText3{fill:#000 !important}#mermaid-svg-XZ5PMftJUfoIkLu5 .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-XZ5PMftJUfoIkLu5 g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-XZ5PMftJUfoIkLu5 g.classGroup text .title{font-weight:bolder}#mermaid-svg-XZ5PMftJUfoIkLu5 g.clickable{cursor:pointer}#mermaid-svg-XZ5PMftJUfoIkLu5 g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-XZ5PMftJUfoIkLu5 g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-XZ5PMftJUfoIkLu5 .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-XZ5PMftJUfoIkLu5 .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-XZ5PMftJUfoIkLu5 .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-XZ5PMftJUfoIkLu5 .dashed-line{stroke-dasharray:3}#mermaid-svg-XZ5PMftJUfoIkLu5 #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-XZ5PMftJUfoIkLu5 #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-XZ5PMftJUfoIkLu5 #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-XZ5PMftJUfoIkLu5 #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-XZ5PMftJUfoIkLu5 #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-XZ5PMftJUfoIkLu5 #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-XZ5PMftJUfoIkLu5 #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-XZ5PMftJUfoIkLu5 #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-XZ5PMftJUfoIkLu5 .commit-id,#mermaid-svg-XZ5PMftJUfoIkLu5 .commit-msg,#mermaid-svg-XZ5PMftJUfoIkLu5 .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-XZ5PMftJUfoIkLu5 .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-XZ5PMftJUfoIkLu5 .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-XZ5PMftJUfoIkLu5 g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-XZ5PMftJUfoIkLu5 g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-XZ5PMftJUfoIkLu5 g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-XZ5PMftJUfoIkLu5 g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-XZ5PMftJUfoIkLu5 g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-XZ5PMftJUfoIkLu5 g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-XZ5PMftJUfoIkLu5 .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-XZ5PMftJUfoIkLu5 .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-XZ5PMftJUfoIkLu5 .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-XZ5PMftJUfoIkLu5 .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-XZ5PMftJUfoIkLu5 .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-XZ5PMftJUfoIkLu5 .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-XZ5PMftJUfoIkLu5 .edgeLabel text{fill:#333}#mermaid-svg-XZ5PMftJUfoIkLu5 .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-XZ5PMftJUfoIkLu5 .node circle.state-start{fill:black;stroke:black}#mermaid-svg-XZ5PMftJUfoIkLu5 .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-XZ5PMftJUfoIkLu5 #statediagram-barbEnd{fill:#9370db}#mermaid-svg-XZ5PMftJUfoIkLu5 .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-XZ5PMftJUfoIkLu5 .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-XZ5PMftJUfoIkLu5 .statediagram-state .divider{stroke:#9370db}#mermaid-svg-XZ5PMftJUfoIkLu5 .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-XZ5PMftJUfoIkLu5 .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-XZ5PMftJUfoIkLu5 .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-XZ5PMftJUfoIkLu5 .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-XZ5PMftJUfoIkLu5 .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-XZ5PMftJUfoIkLu5 .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-XZ5PMftJUfoIkLu5 .note-edge{stroke-dasharray:5}#mermaid-svg-XZ5PMftJUfoIkLu5 .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-XZ5PMftJUfoIkLu5 .error-icon{fill:#522}#mermaid-svg-XZ5PMftJUfoIkLu5 .error-text{fill:#522;stroke:#522}#mermaid-svg-XZ5PMftJUfoIkLu5 .edge-thickness-normal{stroke-width:2px}#mermaid-svg-XZ5PMftJUfoIkLu5 .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-XZ5PMftJUfoIkLu5 .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-XZ5PMftJUfoIkLu5 .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-XZ5PMftJUfoIkLu5 .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-XZ5PMftJUfoIkLu5 .marker{fill:#333}#mermaid-svg-XZ5PMftJUfoIkLu5 .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;} #mermaid-svg-XZ5PMftJUfoIkLu5 {color: rgba(0, 0, 0, 0.75);font: ;}

URL结构
URI结构
8080
scheme
Http
Domain
localhost
Port
QueryString
author=亚索
ContextPath
examples
ServletPath
servlets/servlet
PathInfo
亚索

​ (具体的在Tomcat配置文件里如何写,就不在过多介绍了,请自行在传智、尚硅谷、黑马等网站学习)

上图中PathInfo和QueryString部分都出现了中文,那么服务器又如何解析这个URL的后半部分呢(Google 浏览器 Network):

没错,这个“亚索”就被分解成了——“%E4%BA%9A%E7%B4%A2”(因为是XJB写的,所以是404)

这里PathInfo和QueryString是UTF-8(而Firefox中QueryString默认是GBK),至于为什么会有“%”?查阅 URL 的编码规范 RFC3986 可知,浏览器编码 URL 是:将非 ASCII 字符按照某种编码格式,编码成 16 进制数字,然后将每个 16 进制表示的字节前加上“%”,所以最终的 URL 就成了上图了。

  • 解码(Tomcat为栗子= =)

    解码操作是在InternalInputBuffer(org.apache.coyote.HTTP11.InternalInputBuffer )类的,parseRequestLine 方法中。

    这个方法把传过来的 URL 的 byte[] 设置到 Request(org.apache.coyote.Request) 类的相应的属性中。

    这里的 URL 仍然是 byte 格式,转成 char 是在CoyoteAdapter (org.apache.catalina.connector.CoyoteAdapter ) 类的 convertURI 方法中完成的。

    看波图,理解理解:

    #mermaid-svg-9Aw4g17hy4AYwbZN .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-9Aw4g17hy4AYwbZN .label text{fill:#333}#mermaid-svg-9Aw4g17hy4AYwbZN .node rect,#mermaid-svg-9Aw4g17hy4AYwbZN .node circle,#mermaid-svg-9Aw4g17hy4AYwbZN .node ellipse,#mermaid-svg-9Aw4g17hy4AYwbZN .node polygon,#mermaid-svg-9Aw4g17hy4AYwbZN .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-9Aw4g17hy4AYwbZN .node .label{text-align:center;fill:#333}#mermaid-svg-9Aw4g17hy4AYwbZN .node.clickable{cursor:pointer}#mermaid-svg-9Aw4g17hy4AYwbZN .arrowheadPath{fill:#333}#mermaid-svg-9Aw4g17hy4AYwbZN .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-9Aw4g17hy4AYwbZN .flowchart-link{stroke:#333;fill:none}#mermaid-svg-9Aw4g17hy4AYwbZN .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-9Aw4g17hy4AYwbZN .edgeLabel rect{opacity:0.9}#mermaid-svg-9Aw4g17hy4AYwbZN .edgeLabel span{color:#333}#mermaid-svg-9Aw4g17hy4AYwbZN .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-9Aw4g17hy4AYwbZN .cluster text{fill:#333}#mermaid-svg-9Aw4g17hy4AYwbZN div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-9Aw4g17hy4AYwbZN .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-9Aw4g17hy4AYwbZN text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-9Aw4g17hy4AYwbZN .actor-line{stroke:grey}#mermaid-svg-9Aw4g17hy4AYwbZN .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-9Aw4g17hy4AYwbZN .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-9Aw4g17hy4AYwbZN #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-9Aw4g17hy4AYwbZN .sequenceNumber{fill:#fff}#mermaid-svg-9Aw4g17hy4AYwbZN #sequencenumber{fill:#333}#mermaid-svg-9Aw4g17hy4AYwbZN #crosshead path{fill:#333;stroke:#333}#mermaid-svg-9Aw4g17hy4AYwbZN .messageText{fill:#333;stroke:#333}#mermaid-svg-9Aw4g17hy4AYwbZN .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-9Aw4g17hy4AYwbZN .labelText,#mermaid-svg-9Aw4g17hy4AYwbZN .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-9Aw4g17hy4AYwbZN .loopText,#mermaid-svg-9Aw4g17hy4AYwbZN .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-9Aw4g17hy4AYwbZN .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-9Aw4g17hy4AYwbZN .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-9Aw4g17hy4AYwbZN .noteText,#mermaid-svg-9Aw4g17hy4AYwbZN .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-9Aw4g17hy4AYwbZN .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-9Aw4g17hy4AYwbZN .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-9Aw4g17hy4AYwbZN .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-9Aw4g17hy4AYwbZN .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-9Aw4g17hy4AYwbZN .section{stroke:none;opacity:0.2}#mermaid-svg-9Aw4g17hy4AYwbZN .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-9Aw4g17hy4AYwbZN .section2{fill:#fff400}#mermaid-svg-9Aw4g17hy4AYwbZN .section1,#mermaid-svg-9Aw4g17hy4AYwbZN .section3{fill:#fff;opacity:0.2}#mermaid-svg-9Aw4g17hy4AYwbZN .sectionTitle0{fill:#333}#mermaid-svg-9Aw4g17hy4AYwbZN .sectionTitle1{fill:#333}#mermaid-svg-9Aw4g17hy4AYwbZN .sectionTitle2{fill:#333}#mermaid-svg-9Aw4g17hy4AYwbZN .sectionTitle3{fill:#333}#mermaid-svg-9Aw4g17hy4AYwbZN .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-9Aw4g17hy4AYwbZN .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-9Aw4g17hy4AYwbZN .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-9Aw4g17hy4AYwbZN .grid path{stroke-width:0}#mermaid-svg-9Aw4g17hy4AYwbZN .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-9Aw4g17hy4AYwbZN .task{stroke-width:2}#mermaid-svg-9Aw4g17hy4AYwbZN .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-9Aw4g17hy4AYwbZN .taskText:not([font-size]){font-size:11px}#mermaid-svg-9Aw4g17hy4AYwbZN .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-9Aw4g17hy4AYwbZN .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-9Aw4g17hy4AYwbZN .task.clickable{cursor:pointer}#mermaid-svg-9Aw4g17hy4AYwbZN .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-9Aw4g17hy4AYwbZN .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-9Aw4g17hy4AYwbZN .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-9Aw4g17hy4AYwbZN .taskText0,#mermaid-svg-9Aw4g17hy4AYwbZN .taskText1,#mermaid-svg-9Aw4g17hy4AYwbZN .taskText2,#mermaid-svg-9Aw4g17hy4AYwbZN .taskText3{fill:#fff}#mermaid-svg-9Aw4g17hy4AYwbZN .task0,#mermaid-svg-9Aw4g17hy4AYwbZN .task1,#mermaid-svg-9Aw4g17hy4AYwbZN .task2,#mermaid-svg-9Aw4g17hy4AYwbZN .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-9Aw4g17hy4AYwbZN .taskTextOutside0,#mermaid-svg-9Aw4g17hy4AYwbZN .taskTextOutside2{fill:#000}#mermaid-svg-9Aw4g17hy4AYwbZN .taskTextOutside1,#mermaid-svg-9Aw4g17hy4AYwbZN .taskTextOutside3{fill:#000}#mermaid-svg-9Aw4g17hy4AYwbZN .active0,#mermaid-svg-9Aw4g17hy4AYwbZN .active1,#mermaid-svg-9Aw4g17hy4AYwbZN .active2,#mermaid-svg-9Aw4g17hy4AYwbZN .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-9Aw4g17hy4AYwbZN .activeText0,#mermaid-svg-9Aw4g17hy4AYwbZN .activeText1,#mermaid-svg-9Aw4g17hy4AYwbZN .activeText2,#mermaid-svg-9Aw4g17hy4AYwbZN .activeText3{fill:#000 !important}#mermaid-svg-9Aw4g17hy4AYwbZN .done0,#mermaid-svg-9Aw4g17hy4AYwbZN .done1,#mermaid-svg-9Aw4g17hy4AYwbZN .done2,#mermaid-svg-9Aw4g17hy4AYwbZN .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-9Aw4g17hy4AYwbZN .doneText0,#mermaid-svg-9Aw4g17hy4AYwbZN .doneText1,#mermaid-svg-9Aw4g17hy4AYwbZN .doneText2,#mermaid-svg-9Aw4g17hy4AYwbZN .doneText3{fill:#000 !important}#mermaid-svg-9Aw4g17hy4AYwbZN .crit0,#mermaid-svg-9Aw4g17hy4AYwbZN .crit1,#mermaid-svg-9Aw4g17hy4AYwbZN .crit2,#mermaid-svg-9Aw4g17hy4AYwbZN .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-9Aw4g17hy4AYwbZN .activeCrit0,#mermaid-svg-9Aw4g17hy4AYwbZN .activeCrit1,#mermaid-svg-9Aw4g17hy4AYwbZN .activeCrit2,#mermaid-svg-9Aw4g17hy4AYwbZN .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-9Aw4g17hy4AYwbZN .doneCrit0,#mermaid-svg-9Aw4g17hy4AYwbZN .doneCrit1,#mermaid-svg-9Aw4g17hy4AYwbZN .doneCrit2,#mermaid-svg-9Aw4g17hy4AYwbZN .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-9Aw4g17hy4AYwbZN .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-9Aw4g17hy4AYwbZN .milestoneText{font-style:italic}#mermaid-svg-9Aw4g17hy4AYwbZN .doneCritText0,#mermaid-svg-9Aw4g17hy4AYwbZN .doneCritText1,#mermaid-svg-9Aw4g17hy4AYwbZN .doneCritText2,#mermaid-svg-9Aw4g17hy4AYwbZN .doneCritText3{fill:#000 !important}#mermaid-svg-9Aw4g17hy4AYwbZN .activeCritText0,#mermaid-svg-9Aw4g17hy4AYwbZN .activeCritText1,#mermaid-svg-9Aw4g17hy4AYwbZN .activeCritText2,#mermaid-svg-9Aw4g17hy4AYwbZN .activeCritText3{fill:#000 !important}#mermaid-svg-9Aw4g17hy4AYwbZN .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-9Aw4g17hy4AYwbZN g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-9Aw4g17hy4AYwbZN g.classGroup text .title{font-weight:bolder}#mermaid-svg-9Aw4g17hy4AYwbZN g.clickable{cursor:pointer}#mermaid-svg-9Aw4g17hy4AYwbZN g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-9Aw4g17hy4AYwbZN g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-9Aw4g17hy4AYwbZN .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-9Aw4g17hy4AYwbZN .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-9Aw4g17hy4AYwbZN .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-9Aw4g17hy4AYwbZN .dashed-line{stroke-dasharray:3}#mermaid-svg-9Aw4g17hy4AYwbZN #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-9Aw4g17hy4AYwbZN #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-9Aw4g17hy4AYwbZN #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-9Aw4g17hy4AYwbZN #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-9Aw4g17hy4AYwbZN #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-9Aw4g17hy4AYwbZN #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-9Aw4g17hy4AYwbZN #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-9Aw4g17hy4AYwbZN #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-9Aw4g17hy4AYwbZN .commit-id,#mermaid-svg-9Aw4g17hy4AYwbZN .commit-msg,#mermaid-svg-9Aw4g17hy4AYwbZN .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-9Aw4g17hy4AYwbZN .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-9Aw4g17hy4AYwbZN .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-9Aw4g17hy4AYwbZN g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-9Aw4g17hy4AYwbZN g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-9Aw4g17hy4AYwbZN g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-9Aw4g17hy4AYwbZN g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-9Aw4g17hy4AYwbZN g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-9Aw4g17hy4AYwbZN g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-9Aw4g17hy4AYwbZN .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-9Aw4g17hy4AYwbZN .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-9Aw4g17hy4AYwbZN .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-9Aw4g17hy4AYwbZN .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-9Aw4g17hy4AYwbZN .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-9Aw4g17hy4AYwbZN .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-9Aw4g17hy4AYwbZN .edgeLabel text{fill:#333}#mermaid-svg-9Aw4g17hy4AYwbZN .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-9Aw4g17hy4AYwbZN .node circle.state-start{fill:black;stroke:black}#mermaid-svg-9Aw4g17hy4AYwbZN .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-9Aw4g17hy4AYwbZN #statediagram-barbEnd{fill:#9370db}#mermaid-svg-9Aw4g17hy4AYwbZN .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-9Aw4g17hy4AYwbZN .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-9Aw4g17hy4AYwbZN .statediagram-state .divider{stroke:#9370db}#mermaid-svg-9Aw4g17hy4AYwbZN .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-9Aw4g17hy4AYwbZN .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-9Aw4g17hy4AYwbZN .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-9Aw4g17hy4AYwbZN .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-9Aw4g17hy4AYwbZN .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-9Aw4g17hy4AYwbZN .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-9Aw4g17hy4AYwbZN .note-edge{stroke-dasharray:5}#mermaid-svg-9Aw4g17hy4AYwbZN .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-9Aw4g17hy4AYwbZN .error-icon{fill:#522}#mermaid-svg-9Aw4g17hy4AYwbZN .error-text{fill:#522;stroke:#522}#mermaid-svg-9Aw4g17hy4AYwbZN .edge-thickness-normal{stroke-width:2px}#mermaid-svg-9Aw4g17hy4AYwbZN .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-9Aw4g17hy4AYwbZN .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-9Aw4g17hy4AYwbZN .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-9Aw4g17hy4AYwbZN .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-9Aw4g17hy4AYwbZN .marker{fill:#333}#mermaid-svg-9Aw4g17hy4AYwbZN .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;} #mermaid-svg-9Aw4g17hy4AYwbZN {color: rgba(0, 0, 0, 0.75);font: ;}

    URL的byte数组
    URL
    InternalInputBuffer类
    调用InternalInputBuffer.parseRequestLine方法
    设置Request类的相应属性

    #mermaid-svg-XFtxOvTxM0SfxAFS .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-XFtxOvTxM0SfxAFS .label text{fill:#333}#mermaid-svg-XFtxOvTxM0SfxAFS .node rect,#mermaid-svg-XFtxOvTxM0SfxAFS .node circle,#mermaid-svg-XFtxOvTxM0SfxAFS .node ellipse,#mermaid-svg-XFtxOvTxM0SfxAFS .node polygon,#mermaid-svg-XFtxOvTxM0SfxAFS .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-XFtxOvTxM0SfxAFS .node .label{text-align:center;fill:#333}#mermaid-svg-XFtxOvTxM0SfxAFS .node.clickable{cursor:pointer}#mermaid-svg-XFtxOvTxM0SfxAFS .arrowheadPath{fill:#333}#mermaid-svg-XFtxOvTxM0SfxAFS .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-XFtxOvTxM0SfxAFS .flowchart-link{stroke:#333;fill:none}#mermaid-svg-XFtxOvTxM0SfxAFS .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-XFtxOvTxM0SfxAFS .edgeLabel rect{opacity:0.9}#mermaid-svg-XFtxOvTxM0SfxAFS .edgeLabel span{color:#333}#mermaid-svg-XFtxOvTxM0SfxAFS .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-XFtxOvTxM0SfxAFS .cluster text{fill:#333}#mermaid-svg-XFtxOvTxM0SfxAFS div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-XFtxOvTxM0SfxAFS .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-XFtxOvTxM0SfxAFS text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-XFtxOvTxM0SfxAFS .actor-line{stroke:grey}#mermaid-svg-XFtxOvTxM0SfxAFS .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-XFtxOvTxM0SfxAFS .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-XFtxOvTxM0SfxAFS #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-XFtxOvTxM0SfxAFS .sequenceNumber{fill:#fff}#mermaid-svg-XFtxOvTxM0SfxAFS #sequencenumber{fill:#333}#mermaid-svg-XFtxOvTxM0SfxAFS #crosshead path{fill:#333;stroke:#333}#mermaid-svg-XFtxOvTxM0SfxAFS .messageText{fill:#333;stroke:#333}#mermaid-svg-XFtxOvTxM0SfxAFS .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-XFtxOvTxM0SfxAFS .labelText,#mermaid-svg-XFtxOvTxM0SfxAFS .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-XFtxOvTxM0SfxAFS .loopText,#mermaid-svg-XFtxOvTxM0SfxAFS .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-XFtxOvTxM0SfxAFS .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-XFtxOvTxM0SfxAFS .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-XFtxOvTxM0SfxAFS .noteText,#mermaid-svg-XFtxOvTxM0SfxAFS .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-XFtxOvTxM0SfxAFS .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-XFtxOvTxM0SfxAFS .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-XFtxOvTxM0SfxAFS .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-XFtxOvTxM0SfxAFS .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-XFtxOvTxM0SfxAFS .section{stroke:none;opacity:0.2}#mermaid-svg-XFtxOvTxM0SfxAFS .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-XFtxOvTxM0SfxAFS .section2{fill:#fff400}#mermaid-svg-XFtxOvTxM0SfxAFS .section1,#mermaid-svg-XFtxOvTxM0SfxAFS .section3{fill:#fff;opacity:0.2}#mermaid-svg-XFtxOvTxM0SfxAFS .sectionTitle0{fill:#333}#mermaid-svg-XFtxOvTxM0SfxAFS .sectionTitle1{fill:#333}#mermaid-svg-XFtxOvTxM0SfxAFS .sectionTitle2{fill:#333}#mermaid-svg-XFtxOvTxM0SfxAFS .sectionTitle3{fill:#333}#mermaid-svg-XFtxOvTxM0SfxAFS .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-XFtxOvTxM0SfxAFS .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-XFtxOvTxM0SfxAFS .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-XFtxOvTxM0SfxAFS .grid path{stroke-width:0}#mermaid-svg-XFtxOvTxM0SfxAFS .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-XFtxOvTxM0SfxAFS .task{stroke-width:2}#mermaid-svg-XFtxOvTxM0SfxAFS .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-XFtxOvTxM0SfxAFS .taskText:not([font-size]){font-size:11px}#mermaid-svg-XFtxOvTxM0SfxAFS .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-XFtxOvTxM0SfxAFS .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-XFtxOvTxM0SfxAFS .task.clickable{cursor:pointer}#mermaid-svg-XFtxOvTxM0SfxAFS .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-XFtxOvTxM0SfxAFS .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-XFtxOvTxM0SfxAFS .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-XFtxOvTxM0SfxAFS .taskText0,#mermaid-svg-XFtxOvTxM0SfxAFS .taskText1,#mermaid-svg-XFtxOvTxM0SfxAFS .taskText2,#mermaid-svg-XFtxOvTxM0SfxAFS .taskText3{fill:#fff}#mermaid-svg-XFtxOvTxM0SfxAFS .task0,#mermaid-svg-XFtxOvTxM0SfxAFS .task1,#mermaid-svg-XFtxOvTxM0SfxAFS .task2,#mermaid-svg-XFtxOvTxM0SfxAFS .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-XFtxOvTxM0SfxAFS .taskTextOutside0,#mermaid-svg-XFtxOvTxM0SfxAFS .taskTextOutside2{fill:#000}#mermaid-svg-XFtxOvTxM0SfxAFS .taskTextOutside1,#mermaid-svg-XFtxOvTxM0SfxAFS .taskTextOutside3{fill:#000}#mermaid-svg-XFtxOvTxM0SfxAFS .active0,#mermaid-svg-XFtxOvTxM0SfxAFS .active1,#mermaid-svg-XFtxOvTxM0SfxAFS .active2,#mermaid-svg-XFtxOvTxM0SfxAFS .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-XFtxOvTxM0SfxAFS .activeText0,#mermaid-svg-XFtxOvTxM0SfxAFS .activeText1,#mermaid-svg-XFtxOvTxM0SfxAFS .activeText2,#mermaid-svg-XFtxOvTxM0SfxAFS .activeText3{fill:#000 !important}#mermaid-svg-XFtxOvTxM0SfxAFS .done0,#mermaid-svg-XFtxOvTxM0SfxAFS .done1,#mermaid-svg-XFtxOvTxM0SfxAFS .done2,#mermaid-svg-XFtxOvTxM0SfxAFS .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-XFtxOvTxM0SfxAFS .doneText0,#mermaid-svg-XFtxOvTxM0SfxAFS .doneText1,#mermaid-svg-XFtxOvTxM0SfxAFS .doneText2,#mermaid-svg-XFtxOvTxM0SfxAFS .doneText3{fill:#000 !important}#mermaid-svg-XFtxOvTxM0SfxAFS .crit0,#mermaid-svg-XFtxOvTxM0SfxAFS .crit1,#mermaid-svg-XFtxOvTxM0SfxAFS .crit2,#mermaid-svg-XFtxOvTxM0SfxAFS .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-XFtxOvTxM0SfxAFS .activeCrit0,#mermaid-svg-XFtxOvTxM0SfxAFS .activeCrit1,#mermaid-svg-XFtxOvTxM0SfxAFS .activeCrit2,#mermaid-svg-XFtxOvTxM0SfxAFS .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-XFtxOvTxM0SfxAFS .doneCrit0,#mermaid-svg-XFtxOvTxM0SfxAFS .doneCrit1,#mermaid-svg-XFtxOvTxM0SfxAFS .doneCrit2,#mermaid-svg-XFtxOvTxM0SfxAFS .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-XFtxOvTxM0SfxAFS .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-XFtxOvTxM0SfxAFS .milestoneText{font-style:italic}#mermaid-svg-XFtxOvTxM0SfxAFS .doneCritText0,#mermaid-svg-XFtxOvTxM0SfxAFS .doneCritText1,#mermaid-svg-XFtxOvTxM0SfxAFS .doneCritText2,#mermaid-svg-XFtxOvTxM0SfxAFS .doneCritText3{fill:#000 !important}#mermaid-svg-XFtxOvTxM0SfxAFS .activeCritText0,#mermaid-svg-XFtxOvTxM0SfxAFS .activeCritText1,#mermaid-svg-XFtxOvTxM0SfxAFS .activeCritText2,#mermaid-svg-XFtxOvTxM0SfxAFS .activeCritText3{fill:#000 !important}#mermaid-svg-XFtxOvTxM0SfxAFS .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-XFtxOvTxM0SfxAFS g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-XFtxOvTxM0SfxAFS g.classGroup text .title{font-weight:bolder}#mermaid-svg-XFtxOvTxM0SfxAFS g.clickable{cursor:pointer}#mermaid-svg-XFtxOvTxM0SfxAFS g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-XFtxOvTxM0SfxAFS g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-XFtxOvTxM0SfxAFS .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-XFtxOvTxM0SfxAFS .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-XFtxOvTxM0SfxAFS .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-XFtxOvTxM0SfxAFS .dashed-line{stroke-dasharray:3}#mermaid-svg-XFtxOvTxM0SfxAFS #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-XFtxOvTxM0SfxAFS #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-XFtxOvTxM0SfxAFS #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-XFtxOvTxM0SfxAFS #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-XFtxOvTxM0SfxAFS #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-XFtxOvTxM0SfxAFS #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-XFtxOvTxM0SfxAFS #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-XFtxOvTxM0SfxAFS #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-XFtxOvTxM0SfxAFS .commit-id,#mermaid-svg-XFtxOvTxM0SfxAFS .commit-msg,#mermaid-svg-XFtxOvTxM0SfxAFS .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-XFtxOvTxM0SfxAFS .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-XFtxOvTxM0SfxAFS .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-XFtxOvTxM0SfxAFS g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-XFtxOvTxM0SfxAFS g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-XFtxOvTxM0SfxAFS g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-XFtxOvTxM0SfxAFS g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-XFtxOvTxM0SfxAFS g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-XFtxOvTxM0SfxAFS g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-XFtxOvTxM0SfxAFS .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-XFtxOvTxM0SfxAFS .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-XFtxOvTxM0SfxAFS .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-XFtxOvTxM0SfxAFS .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-XFtxOvTxM0SfxAFS .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-XFtxOvTxM0SfxAFS .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-XFtxOvTxM0SfxAFS .edgeLabel text{fill:#333}#mermaid-svg-XFtxOvTxM0SfxAFS .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-XFtxOvTxM0SfxAFS .node circle.state-start{fill:black;stroke:black}#mermaid-svg-XFtxOvTxM0SfxAFS .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-XFtxOvTxM0SfxAFS #statediagram-barbEnd{fill:#9370db}#mermaid-svg-XFtxOvTxM0SfxAFS .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-XFtxOvTxM0SfxAFS .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-XFtxOvTxM0SfxAFS .statediagram-state .divider{stroke:#9370db}#mermaid-svg-XFtxOvTxM0SfxAFS .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-XFtxOvTxM0SfxAFS .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-XFtxOvTxM0SfxAFS .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-XFtxOvTxM0SfxAFS .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-XFtxOvTxM0SfxAFS .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-XFtxOvTxM0SfxAFS .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-XFtxOvTxM0SfxAFS .note-edge{stroke-dasharray:5}#mermaid-svg-XFtxOvTxM0SfxAFS .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-XFtxOvTxM0SfxAFS .error-icon{fill:#522}#mermaid-svg-XFtxOvTxM0SfxAFS .error-text{fill:#522;stroke:#522}#mermaid-svg-XFtxOvTxM0SfxAFS .edge-thickness-normal{stroke-width:2px}#mermaid-svg-XFtxOvTxM0SfxAFS .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-XFtxOvTxM0SfxAFS .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-XFtxOvTxM0SfxAFS .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-XFtxOvTxM0SfxAFS .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-XFtxOvTxM0SfxAFS .marker{fill:#333}#mermaid-svg-XFtxOvTxM0SfxAFS .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;} #mermaid-svg-XFtxOvTxM0SfxAFS {color: rgba(0, 0, 0, 0.75);font: ;}

    URL的byte数组
    CoyoteAdapter类
    调用CoyoteAdapter.convertURI方法
    set一下URI的char数组

    看一波复杂的CoyoteAdapter.convertURI的源代码(爱过就过):

    protected void convertURI(MessageBytes uri, Request request) throws Exception {ByteChunk bc = uri.getByteChunk();int length = bc.getLength();CharChunk cc = uri.getCharChunk();cc.allocate(length, -1);String enc = connector.getURIEncoding();if (enc != null) {B2CConverter conv = request.getURIConverter();try {if (conv == null) {conv = new B2CConverter(enc);request.setURIConverter(conv);}} catch (IOException e) {...} if (conv != null) {try {conv.convert(bc, cc, cc.getBuffer().length - cc.getEnd());uri.setChars(cc.getBuffer(), cc.getStart(), cc.getLength());return;} catch (IOException e) {...}}} // Default encoding: fast conversion byte[] bbuf = bc.getBuffer();char[] cbuf = cc.getBuffer();int start = bc.getStart();for (int i = 0; i < length; i++) {cbuf[i] = (char) (bbuf[i + start] & 0xff);}uri.setChars(cbuf, 0, length);}
    

    可以知道,对URL的URI部分进行解码的字符集是在connector中定义的( ,这个是配置哦),所以有中文最好设置了。

    • QueryString的解码过程

      • QueryString (GET方法)与表单参数(POST方法)都是通过request.getParameter方法获取参数值的。对它们的解码,在整个请求过程中,第一次调用request.getParameter方法时进行(等有Filter的时候,你就容易犯错)。request.getParameter 方法被调用时将会调用 Request(org.apache.catalina.connector.Request)类的 parseParameters 方法。

      • 其中,Request.parseParameters()会对GET和POST传过来的参数进行解码(Decode),但是两个字符集可能不一样哦= = 。

      • QueryString解码字符集在要么是 Header 中 ContentType 中定义的 Charset 要么就是默认的 ISO-8859-1。(如果你非要改的话,要在connector的 中的 useBodyEncodingForURI 设置为 true。)

小结:在应用程序中,尽量避免在URL中使用非ASCII字符;当然,如果中文无法避免,那就在服务器端设置好URIEncodinguseBodyEncodingForURI两个参数吧。(不然就乱码咯)

HTTP Header

  • 对Header 中的项(Cookie、redirectPath等)进行解码,是在调用 request.getHeader 中进行的,如果请求的 Header 项没有解码则调用 **MessageBytes.toString()**方法。(这个方法将从 byte 到 char ,使用的默认编码是 ISO-8859-1)

  • 对于上面,我们也不能设置 Header 的其它解码格式,莫得办法,所以如果 Header 中有非 ASCII 字符,解码肯定会有乱码。

  • 但是!!!如果一定要传非 ASCII 字符,可以偷奸耍滑一波——我们可以先将这些字符用 URLEncoder 类(org.apache.catalina.util.URLEncoder)编码,然后再添加到 Header 中,这样在浏览器到服务器的传递过程中就不会丢失信息了,如果我们要访问这些项时再按照相应的字符集解码就好了。

(POST)表单

前面URL部分有提到过,POST表单的参数解码是在第一次调用 request.getParameter 发生的。

和QueryString 不同的是,它是通过 HTTP BODY(马上来讲)传递到服务端的。

当我们在页面上点击 submit 按钮时,浏览器首先将根据 ContentTypeCharset 编码格式对表单填的参数进行编码然后提交到服务器端,在服务器端同样也是用 ContentTypeCharset进行解码(但是,浏览器在默认情况下,提交的content-type不含charset信息,所以Tomcat会使用系统默认的方式去解析)。所以通过 POST 表单提交的参数一般不会出现问题,而且这个字符集编码是我们自己设置的,可以调用request.setCharacterEncoding(charset) 来设置。

注意:一定要在第一次调用 request.getParameter之前就设置request.setCharacterEncoding(charset) ,否则POST表单很可能直接乱码。(也就是说如果有Filter,你就要设置好,要是编解码不可逆,哭都没地方哭

#mermaid-svg-Zgr3k20ZEVTNuSWI .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-Zgr3k20ZEVTNuSWI .label text{fill:#333}#mermaid-svg-Zgr3k20ZEVTNuSWI .node rect,#mermaid-svg-Zgr3k20ZEVTNuSWI .node circle,#mermaid-svg-Zgr3k20ZEVTNuSWI .node ellipse,#mermaid-svg-Zgr3k20ZEVTNuSWI .node polygon,#mermaid-svg-Zgr3k20ZEVTNuSWI .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-Zgr3k20ZEVTNuSWI .node .label{text-align:center;fill:#333}#mermaid-svg-Zgr3k20ZEVTNuSWI .node.clickable{cursor:pointer}#mermaid-svg-Zgr3k20ZEVTNuSWI .arrowheadPath{fill:#333}#mermaid-svg-Zgr3k20ZEVTNuSWI .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-Zgr3k20ZEVTNuSWI .flowchart-link{stroke:#333;fill:none}#mermaid-svg-Zgr3k20ZEVTNuSWI .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-Zgr3k20ZEVTNuSWI .edgeLabel rect{opacity:0.9}#mermaid-svg-Zgr3k20ZEVTNuSWI .edgeLabel span{color:#333}#mermaid-svg-Zgr3k20ZEVTNuSWI .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-Zgr3k20ZEVTNuSWI .cluster text{fill:#333}#mermaid-svg-Zgr3k20ZEVTNuSWI div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-Zgr3k20ZEVTNuSWI .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-Zgr3k20ZEVTNuSWI text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-Zgr3k20ZEVTNuSWI .actor-line{stroke:grey}#mermaid-svg-Zgr3k20ZEVTNuSWI .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-Zgr3k20ZEVTNuSWI .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-Zgr3k20ZEVTNuSWI #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-Zgr3k20ZEVTNuSWI .sequenceNumber{fill:#fff}#mermaid-svg-Zgr3k20ZEVTNuSWI #sequencenumber{fill:#333}#mermaid-svg-Zgr3k20ZEVTNuSWI #crosshead path{fill:#333;stroke:#333}#mermaid-svg-Zgr3k20ZEVTNuSWI .messageText{fill:#333;stroke:#333}#mermaid-svg-Zgr3k20ZEVTNuSWI .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-Zgr3k20ZEVTNuSWI .labelText,#mermaid-svg-Zgr3k20ZEVTNuSWI .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-Zgr3k20ZEVTNuSWI .loopText,#mermaid-svg-Zgr3k20ZEVTNuSWI .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-Zgr3k20ZEVTNuSWI .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-Zgr3k20ZEVTNuSWI .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-Zgr3k20ZEVTNuSWI .noteText,#mermaid-svg-Zgr3k20ZEVTNuSWI .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-Zgr3k20ZEVTNuSWI .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-Zgr3k20ZEVTNuSWI .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-Zgr3k20ZEVTNuSWI .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-Zgr3k20ZEVTNuSWI .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Zgr3k20ZEVTNuSWI .section{stroke:none;opacity:0.2}#mermaid-svg-Zgr3k20ZEVTNuSWI .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-Zgr3k20ZEVTNuSWI .section2{fill:#fff400}#mermaid-svg-Zgr3k20ZEVTNuSWI .section1,#mermaid-svg-Zgr3k20ZEVTNuSWI .section3{fill:#fff;opacity:0.2}#mermaid-svg-Zgr3k20ZEVTNuSWI .sectionTitle0{fill:#333}#mermaid-svg-Zgr3k20ZEVTNuSWI .sectionTitle1{fill:#333}#mermaid-svg-Zgr3k20ZEVTNuSWI .sectionTitle2{fill:#333}#mermaid-svg-Zgr3k20ZEVTNuSWI .sectionTitle3{fill:#333}#mermaid-svg-Zgr3k20ZEVTNuSWI .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Zgr3k20ZEVTNuSWI .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-Zgr3k20ZEVTNuSWI .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Zgr3k20ZEVTNuSWI .grid path{stroke-width:0}#mermaid-svg-Zgr3k20ZEVTNuSWI .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-Zgr3k20ZEVTNuSWI .task{stroke-width:2}#mermaid-svg-Zgr3k20ZEVTNuSWI .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Zgr3k20ZEVTNuSWI .taskText:not([font-size]){font-size:11px}#mermaid-svg-Zgr3k20ZEVTNuSWI .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Zgr3k20ZEVTNuSWI .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-Zgr3k20ZEVTNuSWI .task.clickable{cursor:pointer}#mermaid-svg-Zgr3k20ZEVTNuSWI .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-Zgr3k20ZEVTNuSWI .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-Zgr3k20ZEVTNuSWI .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-Zgr3k20ZEVTNuSWI .taskText0,#mermaid-svg-Zgr3k20ZEVTNuSWI .taskText1,#mermaid-svg-Zgr3k20ZEVTNuSWI .taskText2,#mermaid-svg-Zgr3k20ZEVTNuSWI .taskText3{fill:#fff}#mermaid-svg-Zgr3k20ZEVTNuSWI .task0,#mermaid-svg-Zgr3k20ZEVTNuSWI .task1,#mermaid-svg-Zgr3k20ZEVTNuSWI .task2,#mermaid-svg-Zgr3k20ZEVTNuSWI .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-Zgr3k20ZEVTNuSWI .taskTextOutside0,#mermaid-svg-Zgr3k20ZEVTNuSWI .taskTextOutside2{fill:#000}#mermaid-svg-Zgr3k20ZEVTNuSWI .taskTextOutside1,#mermaid-svg-Zgr3k20ZEVTNuSWI .taskTextOutside3{fill:#000}#mermaid-svg-Zgr3k20ZEVTNuSWI .active0,#mermaid-svg-Zgr3k20ZEVTNuSWI .active1,#mermaid-svg-Zgr3k20ZEVTNuSWI .active2,#mermaid-svg-Zgr3k20ZEVTNuSWI .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-Zgr3k20ZEVTNuSWI .activeText0,#mermaid-svg-Zgr3k20ZEVTNuSWI .activeText1,#mermaid-svg-Zgr3k20ZEVTNuSWI .activeText2,#mermaid-svg-Zgr3k20ZEVTNuSWI .activeText3{fill:#000 !important}#mermaid-svg-Zgr3k20ZEVTNuSWI .done0,#mermaid-svg-Zgr3k20ZEVTNuSWI .done1,#mermaid-svg-Zgr3k20ZEVTNuSWI .done2,#mermaid-svg-Zgr3k20ZEVTNuSWI .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-Zgr3k20ZEVTNuSWI .doneText0,#mermaid-svg-Zgr3k20ZEVTNuSWI .doneText1,#mermaid-svg-Zgr3k20ZEVTNuSWI .doneText2,#mermaid-svg-Zgr3k20ZEVTNuSWI .doneText3{fill:#000 !important}#mermaid-svg-Zgr3k20ZEVTNuSWI .crit0,#mermaid-svg-Zgr3k20ZEVTNuSWI .crit1,#mermaid-svg-Zgr3k20ZEVTNuSWI .crit2,#mermaid-svg-Zgr3k20ZEVTNuSWI .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-Zgr3k20ZEVTNuSWI .activeCrit0,#mermaid-svg-Zgr3k20ZEVTNuSWI .activeCrit1,#mermaid-svg-Zgr3k20ZEVTNuSWI .activeCrit2,#mermaid-svg-Zgr3k20ZEVTNuSWI .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-Zgr3k20ZEVTNuSWI .doneCrit0,#mermaid-svg-Zgr3k20ZEVTNuSWI .doneCrit1,#mermaid-svg-Zgr3k20ZEVTNuSWI .doneCrit2,#mermaid-svg-Zgr3k20ZEVTNuSWI .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-Zgr3k20ZEVTNuSWI .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-Zgr3k20ZEVTNuSWI .milestoneText{font-style:italic}#mermaid-svg-Zgr3k20ZEVTNuSWI .doneCritText0,#mermaid-svg-Zgr3k20ZEVTNuSWI .doneCritText1,#mermaid-svg-Zgr3k20ZEVTNuSWI .doneCritText2,#mermaid-svg-Zgr3k20ZEVTNuSWI .doneCritText3{fill:#000 !important}#mermaid-svg-Zgr3k20ZEVTNuSWI .activeCritText0,#mermaid-svg-Zgr3k20ZEVTNuSWI .activeCritText1,#mermaid-svg-Zgr3k20ZEVTNuSWI .activeCritText2,#mermaid-svg-Zgr3k20ZEVTNuSWI .activeCritText3{fill:#000 !important}#mermaid-svg-Zgr3k20ZEVTNuSWI .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Zgr3k20ZEVTNuSWI g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-Zgr3k20ZEVTNuSWI g.classGroup text .title{font-weight:bolder}#mermaid-svg-Zgr3k20ZEVTNuSWI g.clickable{cursor:pointer}#mermaid-svg-Zgr3k20ZEVTNuSWI g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-Zgr3k20ZEVTNuSWI g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-Zgr3k20ZEVTNuSWI .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-Zgr3k20ZEVTNuSWI .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-Zgr3k20ZEVTNuSWI .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-Zgr3k20ZEVTNuSWI .dashed-line{stroke-dasharray:3}#mermaid-svg-Zgr3k20ZEVTNuSWI #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Zgr3k20ZEVTNuSWI #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Zgr3k20ZEVTNuSWI #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-Zgr3k20ZEVTNuSWI #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-Zgr3k20ZEVTNuSWI #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Zgr3k20ZEVTNuSWI #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Zgr3k20ZEVTNuSWI #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Zgr3k20ZEVTNuSWI #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Zgr3k20ZEVTNuSWI .commit-id,#mermaid-svg-Zgr3k20ZEVTNuSWI .commit-msg,#mermaid-svg-Zgr3k20ZEVTNuSWI .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Zgr3k20ZEVTNuSWI .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Zgr3k20ZEVTNuSWI .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Zgr3k20ZEVTNuSWI g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Zgr3k20ZEVTNuSWI g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-Zgr3k20ZEVTNuSWI g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-Zgr3k20ZEVTNuSWI g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-Zgr3k20ZEVTNuSWI g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-Zgr3k20ZEVTNuSWI g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-Zgr3k20ZEVTNuSWI .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-Zgr3k20ZEVTNuSWI .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-Zgr3k20ZEVTNuSWI .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-Zgr3k20ZEVTNuSWI .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-Zgr3k20ZEVTNuSWI .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-Zgr3k20ZEVTNuSWI .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-Zgr3k20ZEVTNuSWI .edgeLabel text{fill:#333}#mermaid-svg-Zgr3k20ZEVTNuSWI .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Zgr3k20ZEVTNuSWI .node circle.state-start{fill:black;stroke:black}#mermaid-svg-Zgr3k20ZEVTNuSWI .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-Zgr3k20ZEVTNuSWI #statediagram-barbEnd{fill:#9370db}#mermaid-svg-Zgr3k20ZEVTNuSWI .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-Zgr3k20ZEVTNuSWI .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-Zgr3k20ZEVTNuSWI .statediagram-state .divider{stroke:#9370db}#mermaid-svg-Zgr3k20ZEVTNuSWI .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-Zgr3k20ZEVTNuSWI .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-Zgr3k20ZEVTNuSWI .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-Zgr3k20ZEVTNuSWI .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-Zgr3k20ZEVTNuSWI .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-Zgr3k20ZEVTNuSWI .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-Zgr3k20ZEVTNuSWI .note-edge{stroke-dasharray:5}#mermaid-svg-Zgr3k20ZEVTNuSWI .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-Zgr3k20ZEVTNuSWI .error-icon{fill:#522}#mermaid-svg-Zgr3k20ZEVTNuSWI .error-text{fill:#522;stroke:#522}#mermaid-svg-Zgr3k20ZEVTNuSWI .edge-thickness-normal{stroke-width:2px}#mermaid-svg-Zgr3k20ZEVTNuSWI .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-Zgr3k20ZEVTNuSWI .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-Zgr3k20ZEVTNuSWI .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-Zgr3k20ZEVTNuSWI .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-Zgr3k20ZEVTNuSWI .marker{fill:#333}#mermaid-svg-Zgr3k20ZEVTNuSWI .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;} #mermaid-svg-Zgr3k20ZEVTNuSWI {color: rgba(0, 0, 0, 0.75);font: ;}

服务器
浏览器
打包
对表单参数解码
查看ContentType.Charset
解码后的表单
操作数据
对表单参数编码
找到ContentType.Charset
编码后的表单
要发送的数据

HTTP BODY

请求讲完了,来讲响应。

当用户请求的资源已经成功获取后,这些内容将通过 Response 返回给客户端浏览器,这个过程先要经过编码

再到浏览器进行解码。(过程类似Request,看看就过

  • 这个过程的编解码字符集可以通过 response.setCharacterEncoding 来设置,它将会覆盖 request.getCharacterEncoding 的值,并且通过 Header 的 Content-Type 返回客户端

  • 浏览器接受到,将通过发过来的 Content-Type 的 charset 来解码,如果没有,那么浏览器将根据 HTML的 中的 charset 来解码。

JS部分因为本人不是很熟,而且主要讲Java,所以没做过多阐述了

常见问题分析(中文乱码)

由于往往一次操作涉及到多次编解码,所以出现乱码时很难查找到底是哪个环节出现了问题。下面来分析(欣赏)不同的乱码场景:(你得知道你GG是怎么G的,才好改正

中文变成了奇怪的字符

例如,字符串“淘!我喜欢!”变成了“ì ? £ ?? ò ?2?? £ ?”编码过程如下图所示

字符串在解码时所用的字符集与编码字符集不一致导致汉字变成了看不懂的乱码,而且是一个汉字字符变成两个乱码字符。(解码的时候翻车了)

一个汉字变成了一个“?”

例如,字符串“淘!我喜欢!”变成了“??????”编码过程如下图所示

将中文和中文符号经过不支持中文的 ISO-8859-1 编码后,所有字符变成了“?”,这是因为用 ISO-8859-1 进行编解码时遇到不在码值范围内的字符时统一用 3f 表示,这也就是通常所说的“黑洞”,所有 ISO-8859-1 不认识的字符都变成了“?”(3.2前面有讲)。(编码的时候就翻车了)

一个汉字变成了两个“?”

例如,字符串“淘!我喜欢!”变成了“????????????”编码过程如下图所示

这种情况比较复杂,中文经过多次编码,但是其中有一次编码或者解码不对仍然会出现中文字符变成“?”现象,出现这种情况要仔细查看中间的编码环节,找出出现编码错误的地方。(多处地点翻车)

正确但不正常的编码

还有一种情况是在我们通过 request.getParameter 获取参数值时,当我们直接调用

String value = request.getParameter(name);

会出现乱码,但是如果用下面这样,有中间商调和:

//变byte[],再变char[]
String value = String(request.getParameter(name).getBytes(" ISO-8859-1"), "GBK");

解析时取得的 value 会是正确的汉字字符,这种情况是怎么造成的呢?

这种情况是这样的:

  • 首先ISO-8859-1 字符集的编码范围是 0000-00FF,正好和一个字节的编码范围相对应。

  • 虽然中文字符在经过网络传输时,被错误地“拆”成了两个欧洲字符,但由于输出时也是用 ISO-8859-1,结果被“拆”开的中文字的两半又被合并在一起,从而又刚好组成了一个正确的汉字。

  • 虽然最终能取得正确的汉字,但是还是不建议用这种不正常的方式取得参数值,因为这中间增加了一次额外的编码与解码

  • 这种情况出现乱码时,因为 Tomcat 的配置文件中 useBodyEncodingForURI 配置项没有设置为”true”,从

    而造成第一次解析式用 ISO-8859-1 来解析才造成乱码的。

总结

  1. 几种常见编码格式的区别,然后介绍了支持中文的几种编码格式,并比较了它们的使用场景。

  2. Java 那些地方会涉及到编码问题,已经 Java 中如何对编码的支持。

  3. 以网络 I/O 为例重点介绍了 HTTP 请求中的存在编码的地方

  4. Tomcat 对 HTTP 协议的解析

  5. 中文乱码问题&出现的原因。

学会了吗?点波赞再走!!

3.2 Java编解码场景及实现相关推荐

  1. 【常见的编解码场景】

    常见的编解码场景 一,编码与解码 1.1 字符编解码 字符集和编码 编解码过程分析 编解码举例 1.2 http url编码 1.3 http body编码 1.4 压缩编码 1.5 对象编码 net ...

  2. java tlv生成,TLV格式数据JAVA编解码

    电信系统中不少通信数据都采用TLV格式进行二进制编解码,而具体的TLV格式并无统一的规范,只能算是一种统称,其规定了数据中的相应字段都由Tag-Length-Value三要素组成,有些协议对于固定长度 ...

  3. Java 编解码问题

    ASCII 计算机在美国发明后,为了将用到的一些字符存储到计算机中,将可见字符(英文字母.数字.标点符号)和控制字符(回车.换行...)按顺序罗列出来,用0~127对所需字符进行编号.将0~127的编 ...

  4. java编解码base64

    在alibaba的fastjson中base64上增加的一些方法 package littlehow.base64;import java.nio.charset.Charset; import ja ...

  5. js编码java解码_JS编解码与Java编解码的对应关系

    最近前段在导出数据时会遇到"illegal character"的异常错误,结果发现是在请求地址中请求参数包含了空白字符(其编码为%C2%A0)或者是空格字符(其编码为%20),之 ...

  6. java实现asn.1解码_ASN1编解码实现方法

    第1章概述 1.1背景 系统与充值平台的接口是文件的方式,充值平台将文件内容以ASN.1方式进行编码,系统需要根据ASN.1协议进行解码. 关于ASN.1开发的资料,网上资料非常少,特别是涉及到具体的 ...

  7. java asn.1_ASN1编解码实现方法 | 学步园

    第1章概述 1.1背景 系统与充值平台的接口是文件的方式,充值平台将文件内容以ASN.1方式进行编码,系统需要根据ASN.1协议进行解码. 关于ASN.1开发的资料,网上资料非常少,特别是涉及到具体的 ...

  8. Netty之编解码技术(四)

    通常我们习惯将编码(Encode)称为序列化(serialization),它将对象序列化为字节数组,用于网络传输.数据持久化或者其它用途. 反之,解码(Decode)称为反序列化(deseriali ...

  9. Spring中html字符编解码

    Spring中html字符编解码 场景描述 今天基于 jeesite 在做一个简单的curd的功能时,遇到个比较有意思的问题,在此记录一下,在使用springMVC form标签作双向绑定时,如果文本 ...

最新文章

  1. Ruby Metaprogramming
  2. R语言ggplot2时间序列可视化并在特定日期处添加竖线实战
  3. python批量合并csv_Python合并多个csv文件
  4. Q767 重构字符串
  5. .net mvc web api 返回 json 内容时过滤值为null的属性
  6. 音频处理六:(音频的反FFT)
  7. socket自定义框架
  8. zabbix监控远端主机
  9. 呵,你会51单片机的精确延时吗?
  10. 工业级光纤收发器一般适合哪些应用环境?
  11. chmod命令用于更改文件或目录的所有者_Linux 修改权限命令 chmod 用法示例
  12. DT大数据梦工厂 第72,73讲
  13. MIT 18.01 单变量微积分总结
  14. PPT创作技巧及有用素材
  15. Gitlab权限说明
  16. cs1.6自动退出服务器,CS1.6菜单被流氓服务器修改
  17. 大数据分析技术研究报告(一)
  18. SPRD Camera sensor
  19. Java 与 区块链技术_java区块链技术有哪些主要的特点和应用
  20. 【架构】大数据风控数据系统架构

热门文章

  1. Android碎碎念 -- 阿里Weex
  2. 计算机图形学习—— 直线段的扫描转换算法
  3. css笔记 vertical-align详解
  4. VINS-mono 学习之 三角化
  5. 计算机图形学实验一(二维图形绘制)
  6. 跟着bob学win10 ump 学习笔记: lesson57 Weather
  7. .net下 Windows Service 部署
  8. ChatGPT惨遭围剿?多国封杀、近万人联名抵制……
  9. IT软件工程师求职记,有点启发吧
  10. MySQL——insert注意事项