字符集
<p><br></p>
<h4>utf8mb4 和 utf8 和 utf-8 和有什么区别</h4>
<p>utf-8是变长的, 理论上是可以到 6 个字节的,但现在世界上所有字符用 4 个字节就已经能表示了</p>
<p>占 1 个字节:
数字占1个字节
英文字母占1个字节</p>
<p>占2个字节的:
带有附加符号的拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文及它拿字母则需要二个字节编码</p>
<p>占3个字节的:
基本等同于GBK,含21000多个汉字</p>
<p>占4个字节的:
中日韩超大字符集里面的汉字,有5万多个</p>
<p>mysql 的 utf8 是一个 bug, 只支持了到 3 字节,所以不支持 emoji, 真正的 utf-8 叫 utf8mb4</p>
<ul>
<li>u4e00-u9fa5 (中文) </li>
<li>x3130-x318F (韩文) </li>
<li>xAC00-xD7A3 (韩文) </li>
<li>u0800-u4e00 (日文)</li>
</ul>
<p><br></p>
<h4>字节</h4>
<p>\xFF<br />
\x 是十六进制标示</p>
<p>\015;<br />
\0 是八进制标示</p>
<p>\uFF00<br />
\u是unicode标识 </p>
<p>下面是对 \uFF00 的解释:</p>
<pre><code>1 字节是8位, 能标识 2 的 8 次方 (0 - 255)
FF = 255
1111 1111
00 = 0
0000 0000
所以 \uFF00 其实是 1111 1111 0000 0000
上面代表两字节</code></pre>
<p><br></p>
<h4>字符</h4>
<p>一个字符 由一个 或 多个字节组成</p>
<p><br></p>
<h4>utf-8 和 unicode 的关系</h4>
<p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/c9e929b5afb942cb2dc6353794120f9a?showdoc=.jpg" alt="" /></p>
<p>实际存储占更多位数 =》 为了识别存多少位</p>
<p>解密出来的 unicode 占比较少的位,然后去映射表查中文信息</p>
<p><br></p>
<h4>转义</h4>
<pre><code>遇到 \u 就转
遇到 \\u当成普通字符串
</code></pre>
<p>理解下面即可</p>
<pre><code> fmt.Println("\u4e2d\u6587") // 输出转义结果
fmt.Println(`\u4e2d\u6587`) // 原样输出
fmt.Println("\\u4e2d\\u6587") // 原样输出
go 语言会直接输出转义后的中文,除非你指定为 `` 或者加上斜杆 \
</code></pre>
<p><br></p>
<h4>后端语言转不了js emoji 的原因</h4>
<p><a href="https://www.cnblogs.com/mingao/p/5000114.html">https://www.cnblogs.com/mingao/p/5000114.html</a></p>
<p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/d31fad88ed08feb31a7219542a507a81?showdoc=.jpg" alt="" /></p>
<p><br></p>
<h4>emoji 查询</h4>
<p><a href="https://dict.emojiall.com/zh-hans/emoji/%F0%9F%98%80">https://dict.emojiall.com/zh-hans/emoji/%F0%9F%98%80</a></p>