Per impostazione predefinita, i file vengono letti nelle impostazioni internazionali del sistema, quindi se si dispone di un file che utilizza una codifica non standard, è necessario impostare personalmente la codifica dell'handle del file.
foo = do
handle <- openFile "file.html" ReadMode
hSetEncoding handle utf8_bom
contents <- hGetContents handle
doSomethingWithContents
hClose handle
dovrebbe iniziare. Si noti che questo non contiene la gestione degli errori, il modo migliore sarebbe quindi
import Control.Exception -- for bracket
foo = bracket
(openFile "file.html" ReadMode >>= \h -> hSetEncoding h utf8_bom >> return h)
hClose
(\h -> hGetContents h >>= doSomething)
o
foo = withFile "file.html" ReadMode $
\h -> do hSetEncoding h utf8_bom
contents <- hGetContents h
doSomethingWith contents
fonte
2012-10-15 20:33:53
Puoi pubblicare un dump esadecimale di un file minimale che mostra questo errore per te? Non riesco a duplicare il tuo errore. – ghoti
Usa questo carattere: 'č' –
Qual è il tuo locale? È un utf-8 o qualcosa di simile a ucs2ish (Notepad ++ suggerisce Windows)? –