Haskell 无法正确解析文本

标签 haskell encoding readfile

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

部類 Test《

我尝试使用带 BOM 和不带 BOM 的 UTF-8 以及 UCS-2 对文件进行编码。 我也尝试过将 Haskell 的编码设置为 UTF-8。

文本总是显示为(或更糟):

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

每当我输入 print "《" 时,代码都是 "\12298" 而不是 \960\199\232 从文件读取。

针对这种行为有什么解决方案吗?

最佳答案

猜测:您正在使用 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 中,这将为 test.hs 中程序的单次运行适本地设置 LANG 环境变量。

关于Haskell 无法正确解析文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41169113/

相关文章:

haskell - Haskell 中的所有类型类都有范畴论类比吗?

python - 在Python中读取SPSS(.sav)文件时出现 "title already used as a name or title"错误

Haskell 源编码

objective-c - 编码在 objective-c 中没有给出正确的结果

javascript - 使用 Javascript 检索二进制文件内容,base64 对其进行编码并使用 Python 对其进行反向解码

javascript - 将 Node.js 对象设置为从文件读取的数据

shell - 如何在 shell 脚本中解析配置文件 (*.conf)?

haskell - Haskell 函数可以序列化吗?

haskell - 是否可以根据具体情况定义高阶 "opposite"函数?

list - Haskell 与相交相反(列表)