import{_ as a,c as t,o as e,a4 as s}from"./chunks/framework.Cy9JvDAg.js";const F=JSON.parse('{"title":"6.5 - UTF-8支持","description":"","frontmatter":{"title":"6.5 - UTF-8支持","footer":true,"lastUpdated":true,"outline":"deep"},"headers":[],"relativePath":"6.5.md","filePath":"6.5.md"}'),i={name:"6.5.md"},n=s('<h2 id="_6-5-utf-8支持" tabindex="-1">6.5 - UTF-8支持 <a class="header-anchor" href="#_6-5-utf-8支持" aria-label="Permalink to &quot;6.5 - UTF-8支持&quot;">​</a></h2><p>本库对UTF-8编码提供了一些基础支持。所有提供的函数都放在表 utf8 中。本库对于其他的 Unicode 编码没有提供任何支持。所有需要使用字符含义的操作，例如字符分类，都不在讨论的范围之内。</p><p>除非另有说明，对于所有需要字节位置作参数的函数，都假设这个给出的位置要么是从字节序列的开头数起，要么始于字符串的长度加一数起。就像字符串库中一样。负数索引是从字符串末尾开始数的。</p><p>创建UTF-8字节序的函数可以接收 0x7FFFFFFF 以内的值，其定义于UTF-8原始规范；这意味着单个字节序最多为6个字节。</p><p>用于解释UTF-8字节序的函数只接受合法的字节序（格式正规并且不会过长）。默认情况下，其只接受结果值为Unicode码点中的字节序，拒绝大于 10FFF 的值和增补集。对于布尔参数 lax ，当它打开的时候，会解除检查，以接收 0x7FFFFFFF 之内的值。</p><h3 id="utf8.char" tabindex="-1">utf8.char (···) <a class="header-anchor" href="#utf8.char" aria-label="Permalink to &quot;utf8.char (···) {#utf8.char}&quot;">​</a></h3><p>接受零个或多个整数值，将其转化为对应的UTF-8字节序，并返回包含了这些字节序的字符串。</p><h3 id="utf8.charpattern" tabindex="-1">utf8.charpattern <a class="header-anchor" href="#utf8.charpattern" aria-label="Permalink to &quot;utf8.charpattern  {#utf8.charpattern}&quot;">​</a></h3><p>模式串（是个字符串，不是函数）&quot;[\\0-\\x7F\\xC2-\\xFD][\\x80-\\xBF]*&quot; ，其会匹配一个UTF-8字节序，它假定其是一个UTF-8编码的字符串。</p><h3 id="utf8.codes" tabindex="-1">utf8.codes (s [, lax]) <a class="header-anchor" href="#utf8.codes" aria-label="Permalink to &quot;utf8.codes (s [, lax]) {#utf8.codes}&quot;">​</a></h3><p>用法如下：</p><div class="language-lua vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">lua</span><pre class="shiki shiki-themes github-light github-dark vp-code"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">for</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> p, c </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">in</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> utf8.codes</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(s) </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">do</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> body </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">end</span></span></code></pre></div><p>其会迭代字符串 s 中所有的的UTF-8编码字符，返回值 p 为该字符的位置（以字节为单位计数），c 为对应字符的码点值。当遇到无效的字节序时会抛出错误。</p><h3 id="utf8.codepoint" tabindex="-1">utf8.codepoint (s [, i [, j [, lax]]]) <a class="header-anchor" href="#utf8.codepoint" aria-label="Permalink to &quot;utf8.codepoint (s [, i [, j [, lax]]]) {#utf8.codepoint}&quot;">​</a></h3><p>返回字符串 s 中从第 i 个字节直到第 j 个字节（包括 i 和 j）之间的所有字符的对应码点。参数 i 默认为1、参数 j 默认等于 i 。当遇到任何非法的字节序时会抛出错误。</p><h3 id="utf8.len" tabindex="-1">utf8.len (s [, i [, j [, lax]]]) <a class="header-anchor" href="#utf8.len" aria-label="Permalink to &quot;utf8.len (s [, i [, j [, lax]]]) {#utf8.len}&quot;">​</a></h3><p>返回字符串 s 中从第 i 个字节直到第 j 个字节（包括 i 和 j）之间所包含的UTF-8字符的数量。参数 i 默认为1、参数 j 默认等于-1。当遇到任何非法的字节序时会返回<strong>fail</strong>加上遇到的第一个非法字节的位置。</p><h3 id="utf8.offset" tabindex="-1">utf8.offset (s, n [, i]) <a class="header-anchor" href="#utf8.offset" aria-label="Permalink to &quot;utf8.offset (s, n [, i]) {#utf8.offset}&quot;">​</a></h3><p>返回在字符串 s 中第 n 个字符编码的起始位置（字节位置，从第 i 个字节开始算）。当 n 为负数时则从位置 i 开始往前数。当参数 n 非负且不超过 s 的长度时，参数 i 默认为1，因此 utf8.offset(s, -n) 会获取字符串末尾开始倒数第 n 个字符的字节位置。如果指定的字符不在字符串中或者超出了末尾的范围，那么会返回<strong>fail</strong>。</p><p>有个特殊的例子是，当 n 为0时，该函数会返回包含了在字符串 s 中第 i 个字节的字符的编码起始位置。</p><p>该函数的前提是 s 为一个合法的UTF-8编码的字符串。</p>',21),o=[n];function r(h,l,p,d,c,f){return e(),t("div",null,o)}const k=a(i,[["render",r]]);export{F as __pageData,k as default};
