Записывать суррогатные пары в файл, используя Haskell - PullRequest
0 голосов
/ 31 августа 2018

Это код, который у меня есть:

import qualified System.IO as IO

writeSurrogate :: IO ()
writeSurrogate = do
  IO.writeFile "/home/sibi/surrogate.txt" ['\xD800']

Выполнение вышеуказанного кода дает ошибку:

text-tests: /home/sibi/surrogate.txt: commitBuffer: invalid argument (invalid character)

Причина в том, что это предотвращается самим GHC, поскольку они являются суррогатными кодовыми точками: https://github.com/ghc/ghc/blob/21f0f56164f50844c2150c62f950983b2376f8b6/libraries/base/GHC/IO/Encoding/Failure.hs#L114

Я хочу написать несколько тестовых файлов, которые должны иметь эти данные. Прямо сейчас я использую Python для достижения того, чего я хочу - но я хотел бы знать, есть ли способ (обходной путь с использованием Haskell) для достижения этого.

1 Ответ

0 голосов
/ 31 августа 2018

Конечно, просто напишите нужные байты:

import Data.ByteString as BS
main = BS.writeFile "surrogate.txt" (pack [0xd8, 0x00])
...