Haskell无法正确解析文本

时间:2016-12-15 16:37:47

标签: haskell encoding readfile

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

部類 Test《

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

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

"\8745\9559\9488\920\226\191\920\237\8359 Test\960\199\232" 

每当我输入打印"《"时,代码为"\12298"而不是\960\199\232,如文件所示。

此行为的任何解决方案?

1 个答案:

答案 0 :(得分: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

另一个选择是使用适当的区域设置运行现有程序;例如,尝试:

LANG=en_US.utf8 runhaskell test.hs

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