GHC.IO.Encoding
| Авторские права | (c) The University of Glasgow 2008-2009 |
|---|---|
| Лицензия | см. libraries/base/LICENSE |
| Сопровождающий | libraries@haskell.org |
| Стабильность | внутренний |
| Переносимость | непереносимый |
| Безопасный Haskell | Safe |
| Язык | Haskell2010 |
Описание
Текстовые кодеки для ввода-вывода
API этого модуля нестабилен и не предназначен для использования широкой публикой. Если вам совершенно необходимо от него зависеть, обязательно задайте строгое верхнее ограничение версии, например base < 4.X вместо base < 5, поскольку интерфейс может быстро измениться без особого предупреждения.
data BufferCodec from to state Источник
Конструкторы
| BufferCodec# | |
Поля
| |
Объединённые шаблоны
| pattern BufferCodec :: CodeBuffer from to -> (Buffer from -> Buffer to -> IO (Buffer from, Buffer to)) -> IO () -> IO state -> (state -> IO ()) -> BufferCodec from to state |
data TextEncoding Источник
TextEncoding — это описание схемы преобразования последовательностей байтов в последовательности символов Unicode и обратно.
Например, UTF-8 — это кодировка символов Unicode в последовательность байтов. TextEncoding для UTF-8 — это utf8.
Конструкторы
| TextEncoding | |
Поля
| |
Экземпляры
| Show TextEncoding Источник | С версии: base-4.3.0.0 |
Определён в GHC.Internal.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.Internal.IO.Encoding.Types Методы(==) :: CodingProgress -> CodingProgress -> Bool Источник (/=) :: CodingProgress -> CodingProgress -> Bool Источник | |
| Show CodingProgress Источник | С версии: base-4.4.0.0 |
Определён в GHC.Internal.IO.Encoding.Types МетодыshowsPrec :: Int -> CodingProgress -> ShowS Источник show :: CodingProgress -> String Источник showList :: [CodingProgress] -> ShowS Источник | |
latin1 :: TextEncoding Источник
Кодировка Latin1 (ISO8859-1). Эта кодировка напрямую сопоставляет байты первым 256 кодовым точкам Unicode и поэтому не является полной кодировкой Unicode. Попытка записать символ с кодовой точкой выше '\255' в Handle с использованием кодировки latin1 приведёт к ошибке.
latin1_encode :: CharBuffer -> Buffer Word8 -> IO (CharBuffer, Buffer Word8) Источник
latin1_decode :: Buffer Word8 -> CharBuffer -> IO (Buffer Word8, CharBuffer) Источник
Кодировка Unicode UTF-8
utf8_bom :: TextEncoding Источник
Кодировка Unicode UTF-8 с маркером порядка байтов (BOM; последовательность байтов 0xEF 0xBB 0xBF). Эта кодировка ведёт себя так же, как utf8, за исключением того, что при вводе последовательность BOM игнорируется в начале потока, а при выводе добавляется в его начало.
Маркер порядка байтов в UTF-8 строго говоря не нужен, но иногда используется для определения кодировки файла.
utf16 :: TextEncoding Источник
Кодировка Unicode UTF-16 (для указания порядка байтов следует использовать маркер порядка байтов).
utf16le :: TextEncoding Источник
Кодировка Unicode UTF-16 (младшим байтом вперёд)
utf16be :: TextEncoding Источник
Кодировка Unicode UTF-16 (старшим байтом вперёд)
utf32 :: TextEncoding Источник
Кодировка Unicode UTF-32 (для указания порядка байтов следует использовать маркер порядка байтов).
utf32le :: TextEncoding Источник
Кодировка Unicode UTF-32 (младшим байтом вперёд)
utf32be :: TextEncoding Источник
Кодировка Unicode UTF-32 (старшим байтом вперёд)
initLocaleEncoding :: TextEncoding Источник
С версии: base-4.5.0.0
getLocaleEncoding :: IO TextEncoding Источник
Кодировка Unicode текущей локали
С версии: base-4.5.0.0
getFileSystemEncoding :: IO TextEncoding Источник
Кодировка текущей локали, позволяющая преобразовывать произвольные декодируемые байты туда и обратно без потерь.
Не рассчитывайте на совместимость кодировки с Unicode: она может оказаться ASCII или любой другой кодировкой.
Эта TextEncoding используется для декодирования и кодирования аргументов командной строки и переменных среды на платформах, отличных от Windows.
В Windows по возможности *не следует* использовать эту кодировку, поскольку применение кодовых страниц считается устаревшим: строки следует получать с помощью «широких» API семейства W для UTF-16.
С версии: base-4.5.0.0
getForeignEncoding :: IO TextEncoding Источник
Кодировка Unicode текущей локали, в которой декодируемые байты заменяются ближайшими визуальными аналогами. Используется функциями маршалинга CString в Foreign.C.String
С версии: base-4.5.0.0
setLocaleEncoding :: TextEncoding -> IO () Источник
Задаёт кодировку локали для программы. Локаль влияет на кодирование и декодирование Char при их преобразовании в байты и обратно: например, при чтении и записи файлов (readFile', writeFile) или при использовании стандартного ввода-вывода (getLine, putStrLn). Например, если программа выводит символы, отличные от ASCII, рекомендуется выполнить
setLocaleEncoding utf8
В Windows этого недостаточно: консоль является устройством с состоянием, которое нужно настроить с помощью System.Win32.Console.setConsoleOutputCP, а затем восстановить исходные настройки. Эти нюансы рассмотрены в пакете code-page, предоставляющем кроссплатформенный System.IO.CodePage.withCodePage с гарантированным восстановлением.
Неверная кодировка локали обычно приводит к сообщениям об ошибках, таким как "invalid argument (cannot decode byte sequence starting from ...)" или "invalid argument (cannot encode character ...)".
С версии: base-4.5.0.0
setFileSystemEncoding :: TextEncoding -> IO () Источник
С версии: base-4.5.0.0
setForeignEncoding :: TextEncoding -> IO () Источник
С версии: base-4.5.0.0
char8 :: TextEncoding Источник
Кодировка, в которой кодовые точки Unicode преобразуются в байты посредством взятия остатка от деления кодовой точки на 256. При декодировании байты напрямую преобразуются в соответствующую кодовую точку.
Эта кодировка никогда не приводит к ошибкам ни в одном из направлений. Однако при кодировании теряется информация, поэтому последовательность кодирования и последующего декодирования не является тождественным преобразованием.
С версии: base-4.4.0.0
mkTextEncoding :: String -> IO TextEncoding Источник
Находит именованную кодировку Unicode. Может завершиться ошибкой с исключением
-
isDoesNotExistError, если кодировка неизвестна
Набор известных кодировок зависит от системы, но включает как минимум:
UTF-8
-
UTF-16,UTF-16BE,UTF-16LE -
UTF-32,UTF-32BE,UTF-32LE
Для указания способа обработки недопустимых символов предусмотрен дополнительный синтаксис (заимствованный из GNU iconv):
- суффикс
//IGNORE, напримерUTF-8//IGNORE, приводит к игнорированию всех недопустимых последовательностей при вводе; при выводе отбрасываются все кодовые точки, не представимые в целевой кодировке. - суффикс
//TRANSLITзадаёт выбор символа-замены для недопустимых последовательностей или кодовых точек. - суффикс
//ROUNDTRIPиспользует механизм экранирования в стиле PEP383, чтобы представлять любые недопустимые байты во входных данных как кодовые точки Unicode (в частности, как отдельные суррогаты, которые обычно недопустимы в UTF-32). При выводе эти специальные кодовые точки обнаруживаются и преобразуются обратно в соответствующие исходные байты.
Теоретически этот механизм позволяет преобразовывать произвольные данные туда и обратно через String без потери данных. На практике следует учитывать два ограничения:
- Это может сработать только для кодировки, являющейся надмножеством ASCII: из соображений безопасности мы отказываемся экранировать любые байты со значениями меньше 128. Многие интересующие нас кодировки являются надмножествами ASCII (в частности, можно считать, что кодировка локали является надмножеством ASCII), но многие другие, например UTF-16, таковыми не являются.
- Если базовая кодировка сама по себе не поддерживает обратное преобразование без потерь, этот механизм может завершиться неудачей. Кодировки с обратным преобразованием без потерь — это кодировки, имеющие инъективное отображение в Unicode. Этому критерию соответствуют почти все кодировки, но некоторые — нет. В частности, Shift-JIS (CP932) и Big5 содержат несколько вариантов кодирования одной и той же кодовой точки Unicode.
В Windows доступ к поддерживаемым кодовым страницам можно получить, используя префикс CP; например, "CP1250".
argvEncoding :: IO TextEncoding Источник
Внутренняя кодировка argv
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/9.14.1/docs/libraries/base-4.22.0.0-66f8/GHC-IO-Encoding.html