gpt4 book ai didi

haskell - 在 Haskell 中使用 UTF-8 读取文件作为 IO 字符串

转载 作者:行者123 更新时间:2023-12-04 03:50:15 26 4
gpt4 key购买 nike

我有以下代码可以正常工作,除非文件有 utf-8字符:

module Main where
import Ref
main = do
text <- getLine
theInput <- readFile text
writeFile ("a"++text) (unlist . proc . lines $ theInput)

使用 utf-8 字符我得到这个: hGetContents: invalid argument (invalid byte sequence)
由于我正在使用的文件有 UTF-8字符,我想处理这个异常以便重用从 Ref 导入的函数如果可能的话。

有没有办法阅读 UTF-8文件为 IO String所以我可以重复使用我的 Ref的功能?我应该对我的代码进行哪些修改?提前致谢。

我附上了我的 Ref 中的函数声明模块:
unlist :: [String] -> String
proc :: [String] -> [String]

从前奏:
lines :: String -> [String]

最佳答案

这可以通过 GHC 的基本(但从标准扩展)来完成 System.IO模块,尽管您必须使用更多功能:

module Main where

import Ref
import System.IO

main = do
text <- getLine
inputHandle <- openFile text ReadMode
hSetEncoding inputHandle utf8
theInput <- hGetContents inputHandle
outputHandle <- openFile ("a"++text) WriteMode
hSetEncoding outputHandle utf8
hPutStr outputHandle (unlist . proc . lines $ theInput)
hClose outputHandle -- I guess this one is optional in this case.

关于haskell - 在 Haskell 中使用 UTF-8 读取文件作为 IO 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33444796/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com