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 | |
Поля
| |
Примеры
type TextEncoder state = BufferCodec CharBufElem Word8 state Источник
type TextDecoder state = BufferCodec Word8 CharBufElem state Источник
data CodingProgress Источник
С версии: 4.4.0.0
Конструкторы
| InputUnderflow | Остановка, потому что вход содержит недостаточно доступных элементов или вся последовательность входных данных была успешно преобразована. |
| OutputUnderflow | Остановка, потому что выход содержит недостаточно свободных элементов. |
| InvalidSequence | Остановка, потому что в выходе достаточно свободных элементов для вывода как минимум одного закодированного символа ASCII, но вход содержит недопустимую или непредставимую последовательность. |
Примеры
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) Источник
Кодировка UTF-8 Юникода
utf8_bom :: TextEncoding Источник
Кодировка UTF-8 Юникода с маркером порядка байтов (BOM; последовательность байтов 0xEF 0xBB 0xBF). Эта кодировка ведёт себя как utf8, за исключением того, что при вводе последовательность BOM игнорируется в начале потока, а при выводе последовательность BOM добавляется в начале.
Маркер порядка байтов строго не нужен в UTF-8, но иногда используется для идентификации кодировки файла.
Кодировка Юникод UTF-16 (следует использовать маркер порядка байтов для указания порядка байтов).
utf16le :: TextEncoding Source
Кодировка Юникод UTF-16 (little-endian).
utf16be :: TextEncoding Source
Кодировка Юникод UTF-16 (big-endian).
Кодировка Юникод 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
Кодировка, в которой коды Юникода преобразуются в байты, используя остаток от деления кода на 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 без потерь данных. На практике следует учитывать два ограничения:
- Это имеет смысл только для кодировки, которая является супермножеством ASCII, так как по соображениям безопасности мы отказываемся экранировать любые байты меньше 128. Многие кодировки представляют интерес как супермножества ASCII (в частности, можно предположить, что кодировка локали является супермножеством ASCII), но многие (например, UTF-16) таковыми не являются.
- Если базовой кодировки самой по себе нельзя обратимо преобразовать, этот механизм может завершиться ошибкой. Обратимо преобразуемые кодировки — это те, которые имеют инъективное отображение в Юникод. Почти все кодировки соответствуют этому критерию, но некоторые нет. Заметно, что 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