在测试文件中,我有以下测试字符串:
部類 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
,如文件所示。
此行为的任何解决方案?
答案 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
环境变量。