繁体   English   中英

读取Haskell中具有“ US-ASCII”编码的文件:hGetContents:无效的参数(无效的字节序列)

[英]Reading file with “US-ASCII” encoding in Haskell: hGetContents: invalid argument (invalid byte sequence)

我正在使用Haskell对解析器进行编程,但是此错误是我无法通过的墙。 这是我的代码:

main = do
  arguments    <- getArgs
  let fileName = head arguments
  fileContents <- readFile fileName
  converter    <- open "UTF-8" Nothing
  let titleLength           = length fileName
      titleWithoutExtension = take (titleLength - 4) fileName
      allNonEmptyLines      = unlines $ tail $ filter (/= "") $ lines fileContents

当我尝试使用“ US-ASCII”编码读取文件时,出现著名的错误hGetContents:无效参数(无效字节序列)。 我试图通过“ US-ASCII”更改代码中的“ UTF-8”,但错误仍然存​​在。 有没有办法读取此文件,或者有任何类型的文件处理编码问题?

您应该hSetEncoding为特定的文本编码配置文件句柄,例如:

import System.Environment
import System.IO

main = do
  (path : _) <- getArgs
  h <- openFile path ReadMode
  hSetEncoding h latin1
  contents <- hGetContents h
  -- no need to close h
  putStrLn $ show $ length contents

如果您的文件包含非ASCII字符且未使用UTF8编码,则latin1是一个不错的选择,尽管这不是唯一的可能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM