Spec-Zone.ru › Haskell 7

GHC.IO.Encoding

Авторские права (c) Университет Глазго, 2008-2009
Лицензия см. libraries/base/LICENSE
Поддержка libraries@haskell.org
Стабильность внутренняя
Переносимость непереносимая
Безопасный Haskell Надёжный
Язык Haskell2010

Описание

Кодеки текста для ввода-вывода

data BufferCodec from to state Источник

Конструкторы

BufferCodec

Поля

encode :: CodeBuffer from to

Функция encode преобразует элементы буфера from в буфер to. Она должна преобразовать как можно больше элементов, учитывая размеры буферов, включая преобразование нуля элементов, если места недостаточно в to, или from не содержит полную многобайтовую последовательность.

Если возможны несколько возвращаемых значений CodingProgress, OutputUnderflow должен быть предпочтительнее InvalidSequence. Это позволяет библиотеке ввода-вывода GHC предполагать, что если мы наблюдаем InvalidSequence, то в выходном буфере доступен как минимум один элемент.

Факт, что преобразуются как можно больше элементов, используется библиотекой ввода-вывода для того, чтобы сообщать об ошибках преобразования в момент их фактического возникновения, а не когда буфер преобразуется.

recover :: Buffer from -> Buffer to -> IO (Buffer from, Buffer to)

Функция recover используется для продолжения декодирования в случае появления недопустимых или непредставимых последовательностей. Это включает в себя те, которые обнаружены функцией encode с возвращением InvalidSequence, и те, которые возникают из-за того, что входная последовательность байтов, похоже, обрезана.

Обычно процесс продвигается путём пропуска первого элемента буфера from. Эта функция должна вызываться только если вы уверены, что хотите пропустить элементы и если буфер to имеет как минимум один свободный элемент. Поскольку эта функция обрабатывает ошибки декодирования, она предполагает, что буфер from имеет как минимум один элемент.

recover может вызвать исключение, а не пропустить ничего.

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

С версии: 4.4.0.0

close :: IO ()

Ресурсы, связанные с кодированием, могут быть освобождены. Функцию encode нельзя вызывать повторно после вызова close.

getState :: IO state

Возвращает текущее состояние кодека.

Многие кодеки не имеют состояния, и в этих случаях состояние может быть представлено как '()'. Другие кодеки сохраняют состояние. Например, UTF-16 распознаёт символ BOM (byte-order-mark) в начале входных данных и запоминает, использовать ли режим big-endian или little-endian в дальнейшем. В этом случае состояние кодека будет включать две части информации: находится ли код в начале потока (BOM появляется только в начале) и, если нет, использовать ли кодировку big-endian или little-endian.

setState :: state -> IO ()

data TextEncoding Источник

TextEncoding — это спецификация схемы преобразования между последовательностями байтов и последовательностями символов Юникода.

Например, UTF-8 — это кодировка символов Юникода в последовательность байтов. TextEncoding для UTF-8 — это utf8.

Конструкторы

forall dstate estate . TextEncoding

Поля

textEncodingName :: String

строка, которая может быть передана mkTextEncoding для создания эквивалентного TextEncoding.

mkTextDecoder :: IO (TextDecoder dstate)

Создаёт средство декодирования байтов в символы: результат не должен быть общим для нескольких последовательностей байтов или одновременно в нескольких потоках.

mkTextEncoder :: IO (TextEncoder estate)

Создаёт средство кодирования символов в байты: результат не должен быть общим для нескольких последовательностей символов или одновременно в нескольких потоках.

Примеры

Show TextEncoding

type TextEncoder state = BufferCodec CharBufElem Word8 state Источник

type TextDecoder state = BufferCodec Word8 CharBufElem state Источник

data CodingProgress Источник

С версии: 4.4.0.0

Конструкторы

InputUnderflow

Остановка, потому что вход содержит недостаточно доступных элементов или вся последовательность входных данных была успешно преобразована.

OutputUnderflow

Остановка, потому что выход содержит недостаточно свободных элементов.

InvalidSequence

Остановка, потому что в выходе достаточно свободных элементов для вывода как минимум одного закодированного символа ASCII, но вход содержит недопустимую или непредставимую последовательность.

Примеры

Eq CodingProgress
Show CodingProgress

latin1 :: TextEncoding Источник

Кодировка Latin1 (ISO8859-1). Эта кодировка напрямую отображает байты на первые 256 символов Юникода и, следовательно, не является полной кодировкой Юникода. Попытка записать символ, больший, чем '\255', в Handle с использованием кодировки latin1 приведёт к ошибке.

latin1_encode :: CharBuffer -> Buffer Word8 -> IO (CharBuffer, Buffer Word8) Источник

latin1_decode :: Buffer Word8 -> CharBuffer -> IO (Buffer Word8, CharBuffer) Источник

utf8 :: TextEncoding Источник

Кодировка UTF-8 Юникода

utf8_bom :: TextEncoding Источник

Кодировка UTF-8 Юникода с маркером порядка байтов (BOM; последовательность байтов 0xEF 0xBB 0xBF). Эта кодировка ведёт себя как utf8, за исключением того, что при вводе последовательность BOM игнорируется в начале потока, а при выводе последовательность BOM добавляется в начале.

Маркер порядка байтов строго не нужен в UTF-8, но иногда используется для идентификации кодировки файла.

``` END_OF_DOCUMENT_MARKER

utf16 :: TextEncoding Source

Кодировка Юникод UTF-16 (следует использовать маркер порядка байтов для указания порядка байтов).

utf16le :: TextEncoding Source

Кодировка Юникод UTF-16 (little-endian).

utf16be :: TextEncoding Source

Кодировка Юникод UTF-16 (big-endian).

utf32 :: TextEncoding Source

Кодировка Юникод UTF-32 (следует использовать маркер порядка байтов для указания порядка байтов).

utf32le :: TextEncoding Source

Кодировка Юникод UTF-32 (little-endian).

utf32be :: TextEncoding Source

Кодировка Юникод UTF-32 (big-endian).

initLocaleEncoding :: TextEncoding Source

С версии: 4.5.0.0

getLocaleEncoding :: IO TextEncoding Source

Кодировка Юникод текущего локали.

С версии: 4.5.0.0

getFileSystemEncoding :: IO TextEncoding Source

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

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

В Windows эта кодировка *не должна* использоваться, если это возможно, поскольку использование кодовых страниц устарело: строки должны извлекаться с помощью семейства API UTF-16 с префиксом "wide" (например, W-семейства).

С версии: 4.5.0.0

getForeignEncoding :: IO TextEncoding Source

Кодировка Юникод текущего локали, но где нераспознаваемые байты заменяются на их ближайшее визуальное соответствие. Используется для функций маршалинга CString в Foreign.C.String.

С версии: 4.5.0.0

setLocaleEncoding :: TextEncoding -> IO () Source

С версии: 4.5.0.0

setFileSystemEncoding :: TextEncoding -> IO () Source

С версии: 4.5.0.0

setForeignEncoding :: TextEncoding -> IO () Source

С версии: 4.5.0.0

char8 :: TextEncoding Source

Кодировка, в которой коды Юникода преобразуются в байты, используя остаток от деления кода на 256. При декодировании байты преобразуются непосредственно в эквивалентный код.

Эта кодировка никогда не завершается ошибкой ни в одном направлении. Однако кодирование отбрасывает информацию, поэтому кодирование, за которым следует декодирование, не является тождественным.

С версии: 4.4.0.0

mkTextEncoding :: String -> IO TextEncoding Source

Поиск именованной кодировки Юникод. Может завершиться ошибкой

  • isDoesNotExistError если кодировка неизвестна

Набор известных кодировок зависит от системы, но включает по крайней мере:

  • UTF-8
  • UTF-16, UTF-16BE, UTF-16LE
  • UTF-32, UTF-32BE, UTF-32LE

Существует дополнительная нотация (заимствованная из GNU iconv) для указания того, как обрабатываются недопустимые символы:

  • суффикс //IGNORE, например UTF-8//IGNORE, приведет к тому, что все недопустимые последовательности на входе будут игнорироваться, а на выходе будут отброшены все коды, у которых нет представления в целевой кодировке.
  • суффикс //TRANSLIT выберет символ замены для недопустимых последовательностей или кодов.
  • суффикс //ROUNDTRIP использует механизм escape в стиле PEP383 для представления любых некорректных байтов на входе как кодов Юникода (конкретно, как одиночные суррогаты, которые обычно некорректны в UTF-32). При выводе эти специальные коды обнаруживаются и преобразуются обратно в соответствующие исходные байты.

В теории, этот механизм позволяет произвольным данным быть обратимыми через String без потерь данных. На практике следует учитывать два ограничения:

  1. Это имеет смысл только для кодировки, которая является супермножеством ASCII, так как по соображениям безопасности мы отказываемся экранировать любые байты меньше 128. Многие кодировки представляют интерес как супермножества ASCII (в частности, можно предположить, что кодировка локали является супермножеством ASCII), но многие (например, UTF-16) таковыми не являются.
  2. Если базовой кодировки самой по себе нельзя обратимо преобразовать, этот механизм может завершиться ошибкой. Обратимо преобразуемые кодировки — это те, которые имеют инъективное отображение в Юникод. Почти все кодировки соответствуют этому критерию, но некоторые нет. Заметно, что Shift-JIS (CP932) и Big5 содержат несколько различных кодировок одного и того же кода Юникода.

В Windows вы можете получить доступ к поддерживаемым кодовым страницам с префиксом CP; например, "CP1250".

© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/7.10.3/docs/html/libraries/base-4.8.2.0/GHC-IO-Encoding.html

Spec-Zone.ru

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