Spec-Zone.ru › Haskell 9

GHC.IO.Encoding

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

Описание

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

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

тип BufferCodec из в состояние Источник

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

BufferCodec#

Поля

  • encode# :: CodeBuffer# из в

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

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

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

  • recover# :: Buffer из -> Buffer в -> State# RealWorld -> (# State# RealWorld, Buffer из, Buffer в #)

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

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

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

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

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

  • close# :: IO ()

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

  • getState# :: IO состояние

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

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

  • setState# :: состояние -> IO ()

Связанные шаблоны

шаблон BufferCodec :: CodeBuffer из в -> (Buffer из -> Buffer в -> IO (Buffer из, Buffer в)) -> IO () -> IO состояние -> (состояние -> IO ()) -> BufferCodec из в состояние

тип TextEncoding Источник

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

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

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

TextEncoding

Поля

  • textEncodingName :: String

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

  • mkTextDecoder :: IO (TextDecoder dstate)

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

  • mkTextEncoder :: IO (TextEncoder estate)

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

Примеры
Подробности о примерах
Show TextEncoding Источник

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

Подробности об примерах

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

Методы

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

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

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

тип TextEncoder состояние = BufferCodec CharBufElem Word8 состояние Источник

тип TextDecoder состояние = BufferCodec Word8 CharBufElem состояние Источник

тип CodingProgress Источник

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

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

InputUnderflow

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

OutputUnderflow

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

InvalidSequence

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

Примеры
Подробности примеров
Show CodingProgress Исходный код

С версии: base-4.4.0.0

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

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

Методы

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

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

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

Eq CodingProgress Исходный код

С версии: base-4.4.0.0

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

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

Методы

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

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

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 Исходный код

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

Не ожидайте, что кодирование будет совместимым с Юникодом: оно может казаться ASCII или чем-то другим.

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

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

С версии: base-4.5.0.0

getForeignEncoding :: IO TextEncoding Source

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

Since: base-4.5.0.0

setLocaleEncoding :: TextEncoding -> IO () Source

Устанавливает кодировку локали для вашей программы. Локаль влияет на то, как кодируются и декодируются Char при сериализации в байты: например, при чтении или записи файлов (readFile', writeFile) или использовании стандартного ввода/вывода (getLine, putStrLn). Например, если ваша программа выводит не-ASCII символы, рекомендуется выполнить

setLocaleEncoding utf8

Это необходимо, но недостаточно в Windows, где консоль — это состояние устройство, которое нужно настроить с помощью System.Win32.Console.setConsoleOutputCP и восстановить обратно после этого. Эти тонкости покрываются пакетом code-page, который предлагает кроссплатформенную System.IO.CodePage.withCodePage скобку.

Неправильная кодировка локали обычно приводит к сообщениям об ошибках, таким как «неверный аргумент (невозможно декодировать последовательность байтов, начинающуюся с ...)» или «неверный аргумент (невозможно закодировать символ ...)».

Since: base-4.5.0.0

setFileSystemEncoding :: TextEncoding -> IO () Source

Since: 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/9.12.1/docs/libraries/base-4.21.0.0-8e62/GHC-IO-Encoding.html

Spec-Zone.ru

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