Spec-Zone.ru › Haskell 8

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 могут изменять входной буфер. В частности, эта функция используется для реализации транслитерации.

    С: base-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

С: base-4.3.0.0

Подробности реализации

Определено в GHC.IO.Encoding.Types

Методы

showsPrec :: Int -> TextEncoding -> ShowS Источник

show :: TextEncoding -> String Источник

showList :: [TextEncoding] -> ShowS Источник

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

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

data CodingProgress Источник

С: base-4.4.0.0

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

InputUnderflow

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

OutputUnderflow

Прекращение работы из-за недостатка свободных элементов в выходных данных.

InvalidSequence

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

Примеры использования
Подробности примеров использования
Eq CodingProgress

С момента: base-4.4.0.0

Подробности примера использования

Определено в GHC.IO.Encoding.Types

Методы

(==) :: CodingProgress -> CodingProgress -> Bool Исходный код

(/=) :: CodingProgress -> CodingProgress -> Bool Исходный код

Show CodingProgress

С момента: base-4.4.0.0

Подробности примера использования

Определено в GHC.IO.Encoding.Types

Методы

showsPrec :: Int -> CodingProgress -> ShowS Исходный код

show :: CodingProgress -> String Исходный код

showList :: [CodingProgress] -> ShowS Исходный код

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 игнорируется в начале потока, а при выводе добавляется в начало.

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

utf16 :: TextEncoding Исходный код

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

utf16le :: TextEncoding Исходный код

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

utf16be :: TextEncoding Исходный код

Кодировка Юникода UTF-16 (большой порядок байтов).

utf32 :: TextEncoding Исходный код

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

utf32le :: TextEncoding Исходный код

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

utf32be :: TextEncoding Исходный код

Кодировка Юникода UTF-32 (большой порядок байтов).

initLocaleEncoding :: TextEncoding Исходный код

С момента: base-4.5.0.0

getLocaleEncoding :: IO TextEncoding Исходный код

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

С момента: base-4.5.0.0

getFileSystemEncoding :: IO TextEncoding Исходный код

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

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

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

С момента: base-4.5.0.0

getForeignEncoding :: IO TextEncoding Исходный код

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

С момента: base-4.5.0.0

setLocaleEncoding :: TextEncoding -> IO () Исходный код

С момента: base-4.5.0.0

setFileSystemEncoding :: TextEncoding -> IO () Исходный код

С момента: base-4.5.0.0

setForeignEncoding :: TextEncoding -> IO () Source

Since: base-4.5.0.0

char8 :: TextEncoding Source

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

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

Since: base-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 использует механизм эскейпинга в стиле PEP383 для представления всех неверных байтов на входе в виде точек кода Юникода (в частности, как отдельные суррогаты, которые обычно являются недопустимыми в UTF-32). При выводе эти специальные точки кода распознаются и преобразуются в соответствующие исходные байты.

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

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

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

argvEncoding :: IO TextEncoding Source

Внутренняя кодировка argv

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

Spec-Zone.ru

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