Haskell无法正确解析文本

Jor*_*nks 3 encoding haskell readfile

在测试文件中,我有以下测试字符串:

?? Test?
Run Code Online (Sandbox Code Playgroud)

我尝试使用和不使用BOM的UTF-8编码文件,并使用UCS-2.我已经尝试将Haskell的编码设置为UTF-8.

文本总是出现(或更糟):

"\8745\9559\9488\920\226\191\920\237\8359 Test\960\199\232" 
Run Code Online (Sandbox Code Playgroud)

每当我键入打印"?" 的代码"\12298",而不是\960\199\232从FILEREAD所见.

这种行为的解决方案?

Dan*_*ner 7

猜测:您正在使用readFile或类似,并且正在使用非UTF8,非UCS2语言环境.您可以通过设置从中读取的内容的编码(文件句柄)并显式写入(stdout或其他)来解决问题.例如,以下程序可以正确地为我正确读取和写入测试文件:

import System.IO

main = do
    hSetEncoding stdout utf8
    withFile "test.txt" ReadMode $ \h -> do
        hSetEncoding h utf8
        s <- hGetContents h
        print s
        putStr s
Run Code Online (Sandbox Code Playgroud)

另一种选择是使用适当的语言环境运行现有程序; 例如,尝试:

LANG=en_US.utf8 runhaskell test.hs
Run Code Online (Sandbox Code Playgroud)

在最常用的现代shell中,这将为LANG程序的单次运行适当地设置环境变量test.hs.