GHC.IO.Encoding
| Авторские права | (c) Университет Глазго 2008-2009 |
|---|---|
| Лицензия | см. libraries/base/LICENSE |
| Поддержка | libraries@haskell.org |
| Устойчивость | внутренняя |
| Переносимость | непереносимая |
| Безопасный Haskell | Надежный |
| Язык | Haskell2010 |
Описание
Кодеки текста для ввода-вывода
data BufferCodec from to state Источник
Конструкторы
| BufferCodec | |
Поля
| |
data TextEncoding Источник
TextEncoding - это спецификация схемы преобразования между последовательностями байтов и последовательностями символов Юникода.
Например, UTF-8 - это кодирование символов Юникода в последовательность байтов. TextEncoding для UTF-8 - это utf8.
Конструкторы
| forall dstate estate. TextEncoding | |
Поля
| |
Примеры реализации
| 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
Кодировка, в которой точки кода Юникода преобразуются в байты путём взятия остатка от деления точки кода на 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 без потерь данных. На практике существует два ограничения:
- Это может сработать только для кодировки, являющейся расширением ASCII, поскольку по соображениям безопасности мы отказываемся от эскейпинга байтов, меньших 128. Многие кодировки, представляющие интерес, являются расширениями ASCII (в частности, можно предположить, что кодировка локали является расширением ASCII), но многие (например, UTF-16) таковыми не являются.
- Если кодировка на нижнем уровне сама по себе необратима, этот механизм может завершиться ошибкой. Обратимые кодировки — это кодировки, имеющие инъективное отображение в Юникод. Почти все кодировки отвечают этому критерию, но некоторые нет. В частности, 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