小编And*_*eld的帖子

如何在 Haskell 中确定文件文本编码而不使用 openFile 获取句柄?

问题是 openFile 假定 UTF-8 并且句柄返回该编码作为编码。真正的问题是我正在获取(由学生)提交的以 UTF-16LE 编码的文件,我想要识别这些文件,因此我可以将它们转换为 UTF-8。这些文件实际上没有任何超出 ASCII 范围的内容,除了 BOM 标记(转换为 UTF-8 后会排序)。我尝试了以下方法:

fixFileEncoding fname =
  do hdl <- openFile fname ReadMode
     menc <- hGetEncoding hdl
     hClose hdl
     case menc of
       Nothing   ->  system ("cp "++fname++" safe"++fname)
       Just enc  -> 
         do let encstr = show enc
            putStrLn ("@@@@@@" ++ fname ++ " is "++encstr)
            if take 6 encstr == "UTF-16"
            then 
              system ("iconv -f UTF-16LE -t UTF-8 "++fname++" > safe"++fname)
            else 
              system ("cp "++fname++" safe"++fname)

Run Code Online (Sandbox Code Playgroud)

无论文件的实际编码如何,“@@@@@”行都会报告 UTF-8。我通过使用 unixfile …

encoding text haskell utf-16 utf

3
推荐指数
1
解决办法
58
查看次数

标签 统计

encoding ×1

haskell ×1

text ×1

utf ×1

utf-16 ×1