Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell GHC中的字符编码问题_Haskell_Character Encoding - Fatal编程技术网

Haskell GHC中的字符编码问题

Haskell GHC中的字符编码问题,haskell,character-encoding,Haskell,Character Encoding,当我尝试从Haskell程序中读取纯文本文件时,我得到: [fromList*异常:/path/to/file/aaa.txt hGetContents:无效参数(无效或不完整的多字节或宽字符) 我在谷歌上搜索发现这个问题通常通过将LANG设置为en_US.UTF-8来解决 我的区域设置已经是这样了 不确定这是否是GHC的问题 我在Ubuntu 11.10上,你确定aaa.txt包含有效的UTF-8吗?如果它是二进制数据,你需要使用或类似的格式。如果它是另一种编码的文本,你应该使用 例如,如果你

当我尝试从Haskell程序中读取纯文本文件时,我得到:

[fromList*异常:/path/to/file/aaa.txt hGetContents:无效参数(无效或不完整的多字节或宽字符)

我在谷歌上搜索发现这个问题通常通过将LANG设置为en_US.UTF-8来解决 我的区域设置已经是这样了

不确定这是否是GHC的问题


我在Ubuntu 11.10上,你确定aaa.txt包含有效的UTF-8吗?如果它是二进制数据,你需要使用或类似的格式。如果它是另一种编码的文本,你应该使用

例如,如果你的文本是拉丁语-1,那么你会说

hSetEncoding h latin1
其中“h”是您的文件句柄。如果您是从标准输入读取,则其

hSetEncoding stdin latin1
如果您已经从元数据中读取了编码,或者希望自定义无效Unicode的处理,也可以使用一个函数(尽管这仅适用于某些系统)

Unicode标准规定Unicode解析器应该拒绝带有错误的无效字符串,而不是试图修复它们。这是一种故意拒绝,理由是减少了安全漏洞和不一致的解释


(如果您要处理大量文本并必须处理编码问题,您可能需要考虑使用该库;它通常比使用字符串快得多,因为它使用了一个未装箱的数组而不是一个链表,虽然这意味着文本值和操作对它们来说一定是严格的。它还允许您配置更多的POR。

这些是古腾堡的纯文本文件。我刚检查过,文件上写着“字符集编码:ISO拉丁-1”使用HSETencode的方法是什么?我找不到一个例子。我试着把HSETencode=“latin1”一行它进行编译,但给出了相同的错误
hSetEncoding h latin1
,其中
h
是您的文件句柄。您读过Haskell教程吗?无意冒犯,它只是让使用标准库函数等事情变得更容易:)(您可以看到TextEncoding值的列表;通过在同一页面上单击hSetEncoding的类型签名中的TextEncoding链接,可以看到TextEncoding值的列表。)linux下的默认TextEncoding模式是从LANG开始的,因此该文件必须是utf8编码的文件,而不是iso-8859文件。@Jonke:对,这就是为什么如果知道编码是什么,就应该使用hSetEncoding:)