utf8

std.text.utf8

def Codepoint

pub def Codepoint: u32

val REPLACEMENT

pub val REPLACEMENT: Codepoint = 0xFFFD

val MAX_CODEPOINT

pub val MAX_CODEPOINT: Codepoint = 0x10FFFF

fun byte_len

pub fun byte_len(first_byte: u8) usize;

从 UTF-8 首字节返回序列长度

first_byte:UTF-8 序列的第一个字节 ret:有效首字节返回 1-4,无效返回 0

fun codepoint_len

pub fun codepoint_len(cp: Codepoint) usize;

返回编码一个码点(codepoint)所需的字节数

cp:要测量的码点 ret:有效码点返回 1-4,如果大于 U+10FFFF 则返回 0

fun is_continuation

pub fun is_continuation(b: u8) bool;

如果该字节是 UTF-8 连续字节(0x80-0xBF)则为 true

b:要测试的字节 ret:如果是连续字节则为 true

fun encode

pub fun encode(cp: Codepoint, buf: *u8, len: usize) usize;

将码点编码到字节缓冲区中

cp:要编码的码点 buf:目标缓冲区 lenbuf 的大小(以字节为单位) ret:写入的字节数(如果 buf 太小或码点无效则为 0)

fun decode

pub fun decode(buf: *u8, len: usize, cp: *Codepoint) usize;

从字节缓冲区解码一个码点

buf:源缓冲区 len:可用字节数 cp:用于写入解码后码点的指针 ret:消耗的字节数(如果无效或为空则为 0;出错时将 *cp 设为 REPLACEMENT

fun validate

pub fun validate(buf: *u8, len: usize) bool;

检查字节缓冲区是否包含有效的 UTF-8

buf:源缓冲区 len:字节数 ret:如果整个缓冲区都是有效的 UTF-8 则为 true

fun count

pub fun count(buf: *u8, len: usize) usize;

计算 UTF-8 字节缓冲区中的码点数量

buf:源缓冲区 len:字节数 ret:码点数量(计算序列起始处,而不是字节数)