GHC.IO.Encoding
| Авторские права | (c) Университет Глазго 2008-2009 |
|---|---|
| Лицензия | см. libraries/base/LICENSE |
| Поддержка | libraries@haskell.org |
| Стабильность | внутренняя |
| Переносимость | непереносимая |
| Safe Haskell | Safe |
| Язык | Haskell2010 |
Описание
Кодеки текста для ввода-вывода
API этого модуля нестабилен и не предназначен для общего использования. Если вам абсолютно необходимо зависеть от него, убедитесь, что вы используете жёсткую верхнюю границу, например, base < 4.X, а не base < 5, так как интерфейс может быстро меняться без предварительного предупреждения.
тип BufferCodec из в состояние Источник
Конструкторы
| BufferCodec# | |
Поля
| |
Связанные шаблоны
| шаблон BufferCodec :: CodeBuffer из в -> (Buffer из -> Buffer в -> IO (Buffer из, Buffer в)) -> IO () -> IO состояние -> (состояние -> IO ()) -> BufferCodec из в состояние |
тип TextEncoding Источник
A 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 Источник | |
тип TextEncoder состояние = BufferCodec CharBufElem Word8 состояние Источник
тип TextDecoder состояние = BufferCodec Word8 CharBufElem состояние Источник
С момента: 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
Кодировка, в которой кодовые точки Юникода преобразуются в байты, взяв остаток от деления кодовой точки на 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/9.12.1/docs/libraries/base-4.21.0.0-8e62/GHC-IO-Encoding.html