utf8EncodeImpl
Function parameters
Parameters
- c:u21
- out:[]u8
Utf8View iterates the code points of a utf-8 encoded string.
Types
- Utf8View
- Utf8View iterates the code points of a utf-8 encoded string.
- Wtf8View
- Wtf8View iterates the code points of a WTF-8 encoded string,
- Wtf8Iterator
- Asserts that `bytes` is valid WTF-8
Returns how many bytes the UTF-8 representation would require
Functions
- utf8CodepointSequenceLength
- Returns how many bytes the UTF-8 representation would require
- utf8ByteSequenceLength
- Given the first byte of a UTF-8 codepoint,
- utf8Encode
- Encodes the given codepoint into a UTF-8 byte sequence.
- utf8Decode
- Deprecated.
- utf8ValidCodepoint
- Returns true if the given unicode codepoint can be encoded in UTF-8.
- utf8CountCodepoints
- Returns the length of a supplied UTF-8 string literal in terms of unicode
- utf8ValidateSlice
- Returns true if the input consists entirely of UTF-8 codepoints
- utf16CodepointSequenceLength
- Returns how many code units the UTF-16 representation would require
- utf16CodeUnitSequenceLength
- Given the first code unit of a UTF-16 codepoint, returns a number 1-2
- utf16DecodeSurrogatePair
- Decodes the codepoint encoded in the given pair of UTF-16 code units.
- utf16CountCodepoints
- Returns the length of a supplied UTF-16 string literal in terms of unicode
- fmtUtf8
- Return a Formatter for a (potentially ill-formed) UTF-8 string.
- utf16LeToUtf8Alloc
- Caller owns returned memory.
- utf16LeToUtf8AllocZ
- Caller owns returned memory.
- utf8ToUtf16Le
- Returns index of next character.
- utf8ToUtf16LeStringLiteral
- Converts a UTF-8 string literal into a UTF-16LE string literal.
- wtf8ToWtf16LeStringLiteral
- Converts a WTF-8 string literal into a WTF-16LE string literal.
- calcUtf16LeLen
- Returns length in UTF-16LE of UTF-8 slice as length of []u16.
- calcWtf16LeLen
- Returns length in WTF-16LE of WTF-8 slice as length of []u16.
- fmtUtf16Le
- Return a Formatter for a (potentially ill-formed) UTF-16 LE string,
- isSurrogateCodepoint
- Returns true if the codepoint is a surrogate (U+DC00 to U+DFFF)
- wtf8Encode
- Encodes the given codepoint into a WTF-8 byte sequence.
- wtf8Decode
- Deprecated.
- wtf8ValidateSlice
- Returns true if the input consists entirely of WTF-8 codepoints
- wtf16LeToWtf8Alloc
- Caller must free returned memory.
- wtf16LeToWtf8AllocZ
- Caller must free returned memory.
- wtf8ToWtf16Le
- Returns index of next character.
- checkUtf8ToUtf16LeOverflow
- Checks if calling `utf8ToUtf16Le` would overflow.
- checkWtf8ToWtf16LeOverflow
- Checks if calling `utf8ToUtf16Le` would overflow.
- wtf8ToUtf8Lossy
- Surrogate codepoints (U+D800 to U+DFFF) are replaced by the Unicode replacement
- calcWtf8Len
- Returns the length, in bytes, that would be necessary to encode the
Error sets in this namespace
Error Sets
Use this to replace an unknown, unrecognized, or unrepresentable character.
Values
- replacement_character
- Use this to replace an unknown, unrecognized, or unrepresentable character.
- replacement_character_utf8
- = utf8EncodeComptime(replacement_character)
Source
Implementation
fn utf8EncodeImpl(c: u21, out: []u8, comptime surrogates: Surrogates) !u3 {
const length = try utf8CodepointSequenceLength(c);
assert(out.len >= length);
switch (length) {
// The pattern for each is the same
// - Increasing the initial shift by 6 each time
// - Each time after the first shorten the shifted
// value to a max of 0b111111 (63)
1 => out[0] = @as(u8, @intCast(c)), // Can just do 0 + codepoint for initial range
2 => {
out[0] = @as(u8, @intCast(0b11000000 | (c >> 6)));
out[1] = @as(u8, @intCast(0b10000000 | (c & 0b111111)));
},
3 => {
if (surrogates == .cannot_encode_surrogate_half and isSurrogateCodepoint(c)) {
return error.Utf8CannotEncodeSurrogateHalf;
}
out[0] = @as(u8, @intCast(0b11100000 | (c >> 12)));
out[1] = @as(u8, @intCast(0b10000000 | ((c >> 6) & 0b111111)));
out[2] = @as(u8, @intCast(0b10000000 | (c & 0b111111)));
},
4 => {
out[0] = @as(u8, @intCast(0b11110000 | (c >> 18)));
out[1] = @as(u8, @intCast(0b10000000 | ((c >> 12) & 0b111111)));
out[2] = @as(u8, @intCast(0b10000000 | ((c >> 6) & 0b111111)));
out[3] = @as(u8, @intCast(0b10000000 | (c & 0b111111)));
},
else => unreachable,
}
return length;
}