Spec-Zone.ru › D

std.encoding

Классы и функции для обработки и транскодирования между различными кодировками.

В случаях, когда кодировка известна во время компиляции, предоставляются функции для произвольного кодирования и декодирования символов, произвольной транскодирования между строками разных типов, а также проверки и очистки.

В настоящее время поддерживаются кодировки UTF-8, UTF-16, UTF-32, ASCII, ISO-8859-1 (также известная как LATIN-1), ISO-8859-2 (LATIN-2), WINDOWS-1250, WINDOWS-1251 и WINDOWS-1252.

Категория Функции
Декодирование codePoints decode decodeReverse safeDecode
Преобразование codeUnits sanitize transcode
Классификация canEncode isValid isValidCodePoint isValidCodeUnit
BOM BOM BOMSeq getBOM utfBOM
Длина и индекс firstSequence encodedLength index lastSequence validLength
Схемы кодирования encodingName EncodingScheme EncodingSchemeASCII EncodingSchemeLatin1 EncodingSchemeLatin2 EncodingSchemeUtf16Native EncodingSchemeUtf32Native EncodingSchemeUtf8 EncodingSchemeWindows1250 EncodingSchemeWindows1251 EncodingSchemeWindows1252
Представление AsciiChar AsciiString Latin1Char Latin1String Latin2Char Latin2String Windows1250Char Windows1250String Windows1251Char Windows1251String Windows1252Char Windows1252String
Исключения INVALID_SEQUENCE EncodingException


В тех случаях, когда кодировка неизвестна во время компиляции, но известна во время выполнения, предоставляется абстрактный класс EncodingScheme и его подклассы. Для построения кодировщика/декодировщика во время выполнения используется, например,

auto e = EncodingScheme.create("utf-8");


Эта библиотека предоставляет подклассы EncodingScheme для ASCII, ISO-8859-1 (также известной как LATIN-1), ISO-8859-2 (LATIN-2), WINDOWS-1250, WINDOWS-1251, WINDOWS-1252, UTF-8 и (на архитектурах little-endian) UTF-16LE и UTF-32LE; или (на архитектурах big-endian) UTF-16BE и UTF-32BE.

Эта библиотека предоставляет механизм, позволяющий другим модулям добавлять подклассы EncodingScheme для любой другой кодировки.

Лицензия:
Boost License 1.0.
Авторы:
Джанис Карон
Исходный код
std/encoding.d
END_OF_DOCUMENT_MARKER
enum dchar INVALID_SEQUENCE;

Специальное значение, возвращаемое safeDecode

enum AsciiChar: ubyte;

alias AsciiString = immutable(AsciiChar)[];

Определяет различные наборы символов.

enum Latin1Char: ubyte;

Определяет символ, закодированный в Latin1.

alias Latin1String = immutable(Latin1Char)[];

Определяет строку, закодированную в Latin1 (как массив immutable(Latin1Char)).

enum Latin2Char: ubyte;

Определяет символ, закодированный в Latin2.

alias Latin2String = immutable(Latin2Char)[];

Определяет строку, закодированную в Latin2 (как массив immutable(Latin2Char)).

enum Windows1250Char: ubyte;

Определяет символ, закодированный в Windows1250.

alias Windows1250String = immutable(Windows1250Char)[];

Определяет строку, закодированную в Windows1250 (как массив immutable(Windows1250Char)).

enum Windows1251Char: ubyte;

Определяет символ, закодированный в Windows1251.

alias Windows1251String = immutable(Windows1251Char)[];

Определяет строку, закодированную в Windows1251 (как массив immutable(Windows1251Char)).

enum Windows1252Char: ubyte;

Определяет символ, закодированный в Windows1252.

alias Windows1252String = immutable(Windows1252Char)[];

Определяет строку, закодированную в Windows1252 (как массив immutable(Windows1252Char)).

pure nothrow @nogc @safe bool isValidCodePoint(dchar c);

Возвращает true, если c является допустимым кодовым пунктом.

Обратите внимание, что это включает в себя кодовые пункты, не являющиеся символами, U+FFFE и U+FFFF, так как они являются допустимыми кодовыми пунктами (хотя не являются допустимыми символами).

Заменяет
Эта функция заменяет std.utf.startsValidDchar().
Стандарты:
Unicode 5.0, ASCII, ISO-8859-1, ISO-8859-2, WINDOWS-1250, WINDOWS-1251, WINDOWS-1252
Параметры:
dchar c кодовый пункт для проверки
@property string encodingName(T)();

Возвращает имя кодировки.

Тип кодировки нельзя определить. Поэтому необходимо явно указать тип кодировки.

Стандарты:
Unicode 5.0, ASCII, ISO-8859-1, ISO-8859-2, WINDOWS-1250, WINDOWS-1251, WINDOWS-1252
Примеры:
writeln(encodingName!(char)); // "UTF-8"
writeln(encodingName!(wchar)); // "UTF-16"
writeln(encodingName!(dchar)); // "UTF-32"
writeln(encodingName!(AsciiChar)); // "ASCII"
writeln(encodingName!(Latin1Char)); // "ISO-8859-1"
writeln(encodingName!(Latin2Char)); // "ISO-8859-2"
writeln(encodingName!(Windows1250Char)); // "windows-1250"
writeln(encodingName!(Windows1251Char)); // "windows-1251"
writeln(encodingName!(Windows1252Char)); // "windows-1252"
bool canEncode(E)(dchar c);

Возвращает true, если указанный кодовый пункт можно представить в кодировке.

Тип кодировки нельзя определить. Поэтому необходимо явно указать тип кодировки.

Стандарты:
Unicode 5.0, ASCII, ISO-8859-1, ISO-8859-2, WINDOWS-1250, WINDOWS-1251, WINDOWS-1252
Примеры:
assert( canEncode!(Latin1Char)('A'));
assert( canEncode!(Latin2Char)('A'));
assert(!canEncode!(AsciiChar)('\u00A0'));
assert( canEncode!(Latin1Char)('\u00A0'));
assert( canEncode!(Latin2Char)('\u00A0'));
assert( canEncode!(Windows1250Char)('\u20AC'));
assert(!canEncode!(Windows1250Char)('\u20AD'));
assert(!canEncode!(Windows1250Char)('\uFFFD'));
assert( canEncode!(Windows1251Char)('\u0402'));
assert(!canEncode!(Windows1251Char)('\u20AD'));
assert(!canEncode!(Windows1251Char)('\uFFFD'));
assert( canEncode!(Windows1252Char)('\u20AC'));
assert(!canEncode!(Windows1252Char)('\u20AD'));
assert(!canEncode!(Windows1252Char)('\uFFFD'));
assert(!canEncode!(char)(cast(dchar) 0x110000));
Примеры:
Как проверить всю строку
import std.algorithm.searching : find;
import std.utf : byDchar;

assert("The quick brown fox"
    .byDchar
    .find!(x => !canEncode!AsciiChar(x))
    .empty);
bool isValidCodeUnit(E)(E c);

Возвращает true, если код единицы является допустимым. Например, байт 0x80 не будет допустимым в ASCII, потому что ASCII код единицы всегда должны находиться в диапазоне от 0x00 до 0x7F.

Стандарты:
Unicode 5.0, ASCII, ISO-8859-1, ISO-8859-2, WINDOWS-1250, WINDOWS-1251, WINDOWS-1252
Параметры:
E c код единицы для проверки
Примеры:
assert(!isValidCodeUnit(cast(char) 0xC0));
assert(!isValidCodeUnit(cast(char) 0xFF));
assert( isValidCodeUnit(cast(wchar) 0xD800));
assert(!isValidCodeUnit(cast(dchar) 0xD800));
assert(!isValidCodeUnit(cast(AsciiChar) 0xA0));
assert( isValidCodeUnit(cast(Windows1250Char) 0x80));
assert(!isValidCodeUnit(cast(Windows1250Char) 0x81));
assert( isValidCodeUnit(cast(Windows1251Char) 0x80));
assert(!isValidCodeUnit(cast(Windows1251Char) 0x98));
assert( isValidCodeUnit(cast(Windows1252Char) 0x80));
assert(!isValidCodeUnit(cast(Windows1252Char) 0x81));
bool isValid(E)(const(E)[] s);

Возвращает true, если строка закодирована правильно.

Заменяет
Эта функция заменяет std.utf.validate(), однако обратите внимание, что эта функция возвращает true или false, указывающие на валидность входных данных, в то время как более старая функция выбрасывала исключение.
Стандарты:
Unicode 5.0, ASCII, ISO-8859-1, ISO-8859-2, WINDOWS-1250, WINDOWS-1251, WINDOWS-1252
Параметры:
const(E)[] s строка для проверки
Примеры:
assert( isValid("\u20AC100"));
assert(!isValid(cast(char[3])[167, 133, 175]));
size_t validLength(E)(const(E)[] s);

Возвращает длину самой длинной подстроки, начиная с первой код единицы, которая закодирована корректно.

Стандарты:
Unicode 5.0, ASCII, ISO-8859-1, ISO-8859-2, WINDOWS-1250, WINDOWS-1251, WINDOWS-1252
Параметры:
const(E)[] s строка для проверки
immutable(E)[] sanitize(E)(immutable(E)[] s);

Очищает строку, заменяя некорректные последовательности кодовых единиц на допустимые. Результат гарантированно будет валиден для этой кодировки.

Если входная строка уже валидна, эта функция возвращает исходную строку, иначе она создаёт новую строку, заменяя все недопустимые последовательности кодовых единиц замещающим символом кодировки. Недопустимые последовательности будут заменены замещающим символом Unicode (U+FFFD), если он поддерживается, иначе они будут заменены на '?'.

Стандарты:
Unicode 5.0, ASCII, ISO-8859-1, ISO-8859-2, WINDOWS-1250, WINDOWS-1251, WINDOWS-1252
Параметры:
immutable(E)[] s строка для очистки
Примеры:
writeln(sanitize("hello \xF0\x80world")); // "hello \xEF\xBF\xBDworld"
size_t firstSequence(E)(const(E)[] s);

Возвращает длину первой закодированной последовательности.

Входные данные для этой функции ДОЛЖНЫ быть корректно закодированы. Это проверяется по контракту функции.

Стандарты:
Unicode 5.0, ASCII, ISO-8859-1, ISO-8859-2, WINDOWS-1250, WINDOWS-1251, WINDOWS-1252
Параметры:
const(E)[] s строка для выделения
Примеры:
writeln(firstSequence("\u20AC1000")); // "\u20AC".length
writeln(firstSequence("hel")); // "h".length
size_t lastSequence(E)(const(E)[] s);

Возвращает длину последней закодированной последовательности.

Входные данные для этой функции ДОЛЖНЫ быть корректно закодированы. Это проверяется по контракту функции.

Стандарты:
Unicode 5.0, ASCII, ISO-8859-1, ISO-8859-2, WINDOWS-1250, WINDOWS-1251, WINDOWS-1252
Параметры:
const(E)[] s строка для выделения
Примеры:
writeln(lastSequence("1000\u20AC")); // "\u20AC".length
writeln(lastSequence("hellö")); // "ö".length
ptrdiff_t index(E)(const(E)[] s, int n);

Возвращает индекс массива, в котором начинается (n+1)-й кодовый пункт.

Входные данные для этой функции ДОЛЖНЫ быть корректно закодированы. Это проверяется по контракту функции.

Заменяет
Эта функция заменяет std.utf.toUTFindex().
Стандарты:
Unicode 5.0, ASCII, ISO-8859-1, ISO-8859-2, WINDOWS-1250, WINDOWS-1251, WINDOWS-1252
Параметры:
const(E)[] s строка для подсчёта
int n текущий индекс кодового пункта
Примеры:
writeln(index("\u20AC100", 1)); // 3
writeln(index("hällo", 2)); // 3
dchar decode(S)(ref S s);

Декодирует один кодовый пункт.

Эта функция удаляет одну или несколько кодовых единиц из начала строки и возвращает декодированный кодовый пункт, который эти кодовые единицы представляют.

Входные данные для этой функции ДОЛЖНЫ быть корректно закодированы. Это проверяется по контракту функции.

Заменяет
Эта функция заменяет std.utf.decode(), однако обратите внимание, что функция codePoints() заменяет её более удобным способом.
Стандарты:
Unicode 5.0, ASCII, ISO-8859-1, ISO-8859-2, WINDOWS-1250, WINDOWS-1251, WINDOWS-1252
Параметры:
S s строка, из которой должен быть декодирован первый кодовый пункт
dchar decodeReverse(E)(ref const(E)[] s);

Декодирует один кодовый пункт из конца строки.

Эта функция удаляет одну или несколько кодовых единиц из конца строки и возвращает декодированный кодовый пункт, который эти кодовые единицы представляют.

Входные данные для этой функции ДОЛЖНЫ быть корректно закодированы. Это проверяется по контракту функции.

Стандарты:
Unicode 5.0, ASCII, ISO-8859-1, ISO-8859-2, WINDOWS-1250, WINDOWS-1251, WINDOWS-1252
Параметры:
const(E)[] s строка, из которой должен быть декодирован первый кодовый пункт
dchar safeDecode(S)(ref S s);

Декодирует одиночный код-пункт. Входные данные не обязательно должны быть валидными.

Эта функция удаляет одну или несколько кодовых единиц с начала строки и возвращает декодированный код-пункт, который эти кодовые единицы представляют.

Эта функция примет на вход некорректно закодированную строку. Если в начале строки обнаружена некорректная последовательность, эта функция удалит её и вернёт значение INVALID_SEQUENCE.

Стандарты:
Unicode 5.0, ASCII, ISO-8859-1, ISO-8859-2, WINDOWS-1250, WINDOWS-1251, WINDOWS-1252
Параметры:
S s строка, первый код-пункт которой нужно декодировать
size_t encodedLength(E)(dchar c);

Возвращает количество кодовых единиц, необходимых для кодирования одного код-пункта.

Входные данные для этой функции ДОЛЖНЫ быть валидным код-пунктом. Это проверяется в контракте функции.

Тип выходных данных нельзя определить. Поэтому необходимо явно указать кодировку как параметр шаблона.

Стандарты:
Unicode 5.0, ASCII, ISO-8859-1, ISO-8859-2, WINDOWS-1250, WINDOWS-1251, WINDOWS-1252
Параметры:
dchar c код-пункт, который нужно закодировать
E[] encode(E)(dchar c);

Кодирует одиночный код-пункт.

Эта функция кодирует одиночный код-пункт в одну или несколько кодовых единиц. Она возвращает строку, содержащую эти кодовые единицы.

Входные данные для этой функции ДОЛЖНЫ быть валидным код-пунктом. Это проверяется в контракте функции.

Тип выходных данных нельзя определить. Поэтому необходимо явно указать кодировку как параметр шаблона.

Заменяет
Эта функция заменяет std.utf.encode(), однако обратите внимание, что функция codeUnits() заменяет её более удобным способом.
Стандарты:
Unicode 5.0, ASCII, ISO-8859-1, ISO-8859-2, WINDOWS-1250, WINDOWS-1251, WINDOWS-1252
Параметры:
dchar c код-пункт, который нужно закодировать
size_t encode(E)(dchar c, E[] array);

Кодирует одиночный код-пункт в массив.

Эта функция кодирует одиночный код-пункт в одну или несколько кодовых единиц. Кодовые единицы хранятся в предоставленном пользователем массиве фиксированного размера, который должен передаваться по ссылке.

Входные данные для этой функции ДОЛЖНЫ быть валидным код-пунктом. Это проверяется в контракте функции.

Тип выходных данных нельзя определить. Поэтому необходимо явно указать кодировку как параметр шаблона.

Заменяет
Эта функция заменяет std.utf.encode(), однако обратите внимание, что функция codeUnits() заменяет её более удобным способом.
Стандарты:
Unicode 5.0, ASCII, ISO-8859-1, ISO-8859-2, WINDOWS-1250, WINDOWS-1251, WINDOWS-1252
Параметры:
dchar c код-пункт, который нужно закодировать
E[] array массив назначения
Возвращает:
количество кодовых единиц, записанных в массив
void encode(E)(dchar c, void delegate(E) dg);

Кодирует одиночный код-пункт с помощью делегата.

Эта функция кодирует одиночный код-пункт в одну или несколько кодовых единиц. Кодовые единицы передаются по одной делегату.

Входные данные для этой функции ДОЛЖНЫ быть валидным код-пунктом. Это проверяется в контракте функции.

Тип выходных данных нельзя определить. Поэтому необходимо явно указать кодировку как параметр шаблона.

Заменяет
Эта функция заменяет std.utf.encode(), однако обратите внимание, что функция codeUnits() заменяет её более удобным способом.
Стандарты:
Unicode 5.0, ASCII, ISO-8859-1, ISO-8859-2, WINDOWS-1250, WINDOWS-1251, WINDOWS-1252
Параметры:
dchar c код-пункт, который нужно закодировать
void delegate(E) dg делегат, вызываемый для каждой кодовой единицы
size_t encode(Tgt, Src, R)(in Src[] s, R range);

Кодирует содержимое s в единицах типа Tgt, записывая результат в диапазон вывода.

Возвращает:
Количество элементов Tgt записанных в диапазон.
Параметры:
Tgt Тип элемента range.
Src[] s Вводной массив.
R range Диапазон вывода.
CodePoints!E codePoints(E)(immutable(E)[] s);

Возвращает структуру, позволяющую двунаправленно перебирать все код-пункты в строке.

Входные данные для этой функции ДОЛЖНЫ быть валидно закодированными. Это проверяется в контракте функции.

Вы можете перебирать либо с индексом, либо без него. Если указан индекс, он будет инициализироваться на каждой итерации со смещением в строке, с которого начинается код-пункт.

Заменяет
Эта функция заменяет std.utf.decode().
Стандарты:
Unicode 5.0, ASCII, ISO-8859-1, ISO-8859-2, WINDOWS-1250, WINDOWS-1251, WINDOWS-1252
Параметры:
immutable(E)[] s строка, которую нужно декодировать
Пример
string s = "hello world";
foreach (c;codePoints(s))
{
    // do something with c (which will always be a dchar)
}
Обратите внимание, что в настоящее время foreach (c:codePoints(s)) лучше, чем foreach (c;s), так как последний упадет при встрече U+FFFF.
Примеры:
string s = "hello";
string t;
foreach (c;codePoints(s))
{
    t ~= cast(char) c;
}
writeln(s); // t
CodeUnits!E codeUnits(E)(dchar c);

Возвращает структуру, позволяющую двунаправленно перебирать все кодовые единицы в кодовом пункте.

Входные данные для этой функции ДОЛЖНЫ быть валидным код-пунктом. Это проверяется в контракте функции.

Тип выходных данных нельзя определить. Поэтому необходимо явно указать тип кодировки в параметре шаблона.

Заменяет
Эта функция заменяет std.utf.encode().
Стандарты:
Unicode 5.0, ASCII, ISO-8859-1, ISO-8859-2, WINDOWS-1250, WINDOWS-1251, WINDOWS-1252
Параметры:
dchar c код-пункт, который нужно закодировать
Примеры:
char[] a;
foreach (c;codeUnits!(char)(cast(dchar)'\u20AC'))
{
    a ~= c;
}
writeln(a.length); // 3
writeln(a[0]); // 0xE2
writeln(a[1]); // 0x82
writeln(a[2]); // 0xAC
void transcode(Src, Dst)(Src[] s, out Dst[] r);

Преобразует строку из одной кодировки в другую.

Заменяет
Эта функция заменяет std.utf.toUTF8(), std.utf.toUTF16() и std.utf.toUTF32() (но обратите внимание, что to!() заменяет её более удобным способом).
Стандарты:
Unicode 5.0, ASCII, ISO-8859-1, ISO-8859-2, WINDOWS-1250, WINDOWS-1251, WINDOWS-1252
Параметры:
Src[] s Исходная строка. Должна быть валидно закодированной. Это проверяется в контракте функции.
Dst[] r Целевая строка
См. также:
std.conv.to
Примеры:
wstring ws;
// transcode from UTF-8 to UTF-16
transcode("hello world",ws);
writeln(ws); // "hello world"w

Latin1String ls;
// transcode from UTF-16 to ISO-8859-1
transcode(ws, ls);
writeln(ls); // "hello world"
class EncodingException: object.Exception;

Базовый класс исключений, выбрасываемых этим модулем

abstract class EncodingScheme;

Абстрактный базовый класс всех схем кодирования

void register(Klass : EncodingScheme)();

Регистрирует подкласс EncodingScheme.

Эта функция позволяет объявлять пользовательские подклассы EncodingScheme в других модулях.

Параметры:
Klass Подкласс EncodingScheme для регистрации.
Пример
class Amiga1251 : EncodingScheme
{
    shared static this()
    {
        EncodingScheme.register!Amiga1251;
    }
}
static EncodingScheme create(string encodingName);

Получает подкласс EncodingScheme, способный кодировать и декодировать указанную схему кодирования.

Эта функция знает только EncodingScheme, которые были зарегистрированы с помощью функции register().

Пример
auto scheme = EncodingScheme.create("Amiga-1251");
abstract const string toString();

Возвращает стандартное имя схемы кодирования

abstract const string[] names();

Возвращает массив всех известных имён для этой схемы кодирования

abstract const bool canEncode(dchar c);

Возвращает true, если символ c может быть представлен в этой схеме кодирования.

abstract const size_t encodedLength(dchar c);

Возвращает количество ubyte, необходимое для кодирования этого кодового пункта.

Ввод этой функции ОБЯЗАТЕЛЬНО должен быть допустимым кодовым пунктом.

Параметры:
dchar c кодовый пункт для кодирования
Возвращает:
количество требуемых ubyte.
abstract const size_t encode(dchar c, ubyte[] buffer);

Кодирует один кодовый пункт в предоставленный буфер фиксированного размера.

Эта функция кодирует один кодовый пункт в один или несколько ubyte. Предоставленный буфер должен быть выровнен по кодовой единице. (Например, UTF-16LE или UTF-16BE должны быть выровнены по wchar, UTF-32LE или UTF-32BE должны быть выровнены по dchar и т. д.)

Ввод этой функции ОБЯЗАТЕЛЬНО должен быть допустимым кодовым пунктом.

Параметры:
dchar c кодовый пункт для кодирования
ubyte[] buffer массив назначения
Возвращает:
количество записанных ubyte.
abstract const dchar decode(ref const(ubyte)[] s);

Декодирует один кодовый пункт.

Эта функция удаляет один или несколько ubyte из начала массива и возвращает декодированный кодовый пункт, который эти ubyte представляют.

Ввод этой функции ОБЯЗАТЕЛЬНО должен быть правильно закодирован.

Параметры:
const(ubyte)[] s массив, первый кодовый пункт которого нужно декодировать
abstract const dchar safeDecode(ref const(ubyte)[] s);

Декодирует один кодовый пункт. Входные данные не обязательно должны быть валидными.

Эта функция удаляет один или несколько ubyte из начала массива и возвращает декодированный кодовый пункт, который эти ubyte представляют.

Эта функция примет массив с неверно закодированными данными. Если в начале строки найдена неверная последовательность, эта функция удалит её и вернёт значение INVALID_SEQUENCE.

Параметры:
const(ubyte)[] s массив, первый кодовый пункт которого нужно декодировать
abstract const @property immutable(ubyte)[] replacementSequence();

Возвращает последовательность ubyte, используемую для представления любого символа, который не может быть представлен в схеме кодирования.

Обычно это будет представление некоторого символа подстановки, такого как U+FFFD или '?'.

bool isValid(const(ubyte)[] s);

Возвращает true, если массив закодирован правильно.

Параметры:
const(ubyte)[] s массив для проверки
size_t validLength()(const(ubyte)[] s);

Возвращает длину самой длинной возможной подстроки, начинающейся с первого элемента, которая закодирована правильно.

Параметры:
const(ubyte)[] s массив для проверки
immutable(ubyte)[] sanitize()(immutable(ubyte)[] s);

Очищает массив, заменяя некорректные последовательности ubyte на корректные. Результат гарантированно будет валиден для этой схемы кодирования.

Если входной массив уже валиден, эта функция возвращает исходный, в противном случае она создаёт новый массив, заменяя все некорректные последовательности последовательностью замены схемы кодирования.

Параметры:
immutable(ubyte)[] s строка для очистки
size_t firstSequence()(const(ubyte)[] s);

Возвращает длину первой закодированной последовательности.

Входные данные для этой функции ОБЯЗАТЕЛЬНО должны быть правильно закодированы. Это обеспечивается контрактом функции.

Параметры:
const(ubyte)[] s массив для вырезания
size_t count()(const(ubyte)[] s);

Возвращает общее количество кодовых пунктов, закодированных в массиве ubyte.

Входные данные для этой функции ОБЯЗАТЕЛЬНО должны быть правильно закодированы. Это обеспечивается контрактом функции.

Параметры:
const(ubyte)[] s строка для подсчёта
ptrdiff_t index()(const(ubyte)[] s, size_t n);

Возвращает индекс массива, в котором начинается (n+1)-й кодовый пункт.

Входные данные для этой функции ОБЯЗАТЕЛЬНО должны быть правильно закодированы. Это обеспечивается контрактом функции.

Параметры:
const(ubyte)[] s строка для подсчёта
size_t n текущий индекс кодового пункта
class EncodingSchemeASCII: std.encoding.EncodingScheme;

Схема кодирования для работы с ASCII

Эта схема распознаёт следующие имена: "ANSI_X3.4-1968", "ANSI_X3.4-1986", "ASCII", "IBM367", "ISO646-US", "ISO_646.irv:1991", "US-ASCII", "cp367", "csASCII" "iso-ir-6", "us"

class EncodingSchemeLatin1: std.encoding.EncodingScheme;

Схема кодирования для работы с Latin-1

Эта схема распознаёт следующие имена: "CP819", "IBM819", "ISO-8859-1", "ISO_8859-1", "ISO_8859-1:1987", "csISOLatin1", "iso-ir-100", "l1", "latin1"

class EncodingSchemeLatin2: std.encoding.EncodingScheme;

Схема кодирования для работы с Latin-2

Эта схема распознаёт следующие имена: "Latin 2", "ISO-8859-2", "ISO_8859-2", "ISO_8859-2:1999", "Windows-28592"

class EncodingSchemeWindows1250: std.encoding.EncodingScheme;

Схема кодирования для работы с Windows-1250

Эта схема распознаёт следующие имена: "windows-1250"

class EncodingSchemeWindows1251: std.encoding.EncodingScheme;

Схема кодирования для работы с Windows-1251

Эта схема распознаёт следующие имена: "windows-1251"

class EncodingSchemeWindows1252: std.encoding.EncodingScheme;

Схема кодирования для работы с Windows-1252

Эта схема распознаёт следующие имена: "windows-1252"

class EncodingSchemeUtf8: std.encoding.EncodingScheme;

Схема кодирования для работы с UTF-8

Эта схема распознаёт следующие имена: "UTF-8"

class EncodingSchemeUtf16Native: std.encoding.EncodingScheme;

Схема кодирования для работы с UTF-16 в родном порядке байтов

Эта схема распознаёт следующие имена: "UTF-16LE" (только для архитектуры с порядком байтов little-endian) "UTF-16BE" (только для архитектуры с порядком байтов big-endian)

class EncodingSchemeUtf32Native: std.encoding.EncodingScheme;

Схема кодирования для работы с UTF-32 в родном порядке байтов

Эта схема распознаёт следующие имена: "UTF-32LE" (только для архитектуры с порядком байтов little-endian) "UTF-32BE" (только для архитектуры с порядком байтов big-endian)

enum BOM: int;

Определения общих разделителей байтов. Элементы enum могут использоваться в качестве индексов в bomTable для получения соответствующих BOMSeq.

none

BOM не найден

utf32be

[0x00, 0x00, 0xFE, 0xFF]

utf32le

[0xFF, 0xFE, 0x00, 0x00]

utf1

[0xF7, 0x64, 0x4C]

utfebcdic

[0xDD, 0x73, 0x66, 0x73]

scsu

[0x0E, 0xFE, 0xFF]

bocu1

[0xFB, 0xEE, 0x28]

gb18030

[0x84, 0x31, 0x95, 0x33]

utf8

[0xEF, 0xBB, 0xBF]

utf16be

[0xFE, 0xFF]

utf16le

[0xFF, 0xFE]

alias BOMSeq = std.typecons.Tuple!(BOM, "schema", ubyte[], "sequence").Tuple;

Тип, хранящийся внутри bomTable.

immutable Tuple!(BOM, "schema", ubyte[], "sequence")[] bomTable;

Сопоставление последовательности байтов с разделителем байтов (BOM)

immutable(BOMSeq) getBOM(Range)(Range input)
Constraints: if (isForwardRange!Range && is(immutable(ElementType!Range) == immutable(ubyte)));

Возвращает BOMSeq для заданной input. Если разделитель BOM отсутствует, возвращается BOMSeq для BOM.none. Последовательность BOM в начале диапазона не будет извлечена из переданного диапазона. Если вы передаёте диапазон типа ссылки, убедитесь, что save создаёт глубокую копию.

Параметры:
Диапазон input Последовательность, для которой проверяется BOM
Возвращает:
найденный BOMSeq, соответствующий переданному input.
Примеры:
import std.format : format;

auto ts = dchar(0x0000FEFF) ~ "Hello World"d;

auto entry = getBOM(cast(ubyte[]) ts);
version (BigEndian)
{
    writeln(entry.schema); // BOM.utf32be
}
else
{
    writeln(entry.schema); // BOM.utf32le
}
enum dchar utfBOM;

Константа, определяющая полностью декодированный BOM

© 1999–2021 The D Language Foundation
Licensed under the Boost License 1.0.
https://dlang.org/phobos/std_encoding.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API