Haskell 在Mac OS上输出UTF-8字符串';s终端

Haskell 在Mac OS上输出UTF-8字符串';s终端,haskell,utf-8,macos,terminal,Haskell,Utf 8,Macos,Terminal,我在haskell中得到了一个程序,它使用包utf8 string输出utf-8,并且只使用这个包的输出函数 我将写入的每个文件的编码设置为: hSetEncoding myFile utf8 {- myFile may be stdout -} 但当我尝试输出时: alpha = [toEnum 0x03B1] {- α -} 我得到的不是Linux(或windows上的文件)上的漂亮字母,而是: α 奇怪的是,即使我尝试将输出写入一个文件,我也无法将mvim作为utf-8文件读回。

我在haskell中得到了一个程序,它使用包
utf8 string
输出utf-8,并且只使用这个包的输出函数

我将写入的每个文件的编码设置为:

hSetEncoding myFile utf8
{- myFile may be stdout -}
但当我尝试输出时:

alpha = [toEnum 0x03B1] {- α -}
我得到的不是Linux(或windows上的文件)上的漂亮字母,而是:

α 

奇怪的是,即使我尝试将输出写入一个文件,我也无法将mvim作为utf-8文件读回。是否有任何方法可以获得正确的行为

您必须确保至少有两件事:

  • 终端编码必须设置为UTF8:

  • 该文件确实是用UTF8编码的(如果您在Linux上观察到正确的结果,应该是这样的)

刚刚在GHC 6.12上尝试了此功能。新的编码功能消除了这种需要 对于
utf8字符串
,在这个简单的例子中

import System.IO

main                         =  do
  out alpha stdout

alpha                        =  [toEnum 0x03B1] {- α -}

out s handle                 =  do
  hSetEncoding handle utf8
  hPutStrLn handle s

请让我知道这是否适用于您在OS X上的操作。请下次发布完整的代码——这会让我更容易帮助您。

我认为您的意思是toEnum而不是来自Enum。将
utf8字符串
与GHC本机编码(设置句柄的编码)结合使用似乎会导致双重转义。在支持指定句柄编码之前,我只在早期GHCs上使用了
utf8字符串
。您指的是哪个文件?输出文件还是源文件?您有输出文件吗?我以为输出在终端。。。输入文件必须用UTF8编码。但在你的例子中,我想问题在于终端的编码。实际上,删除utf8字符串消除了我的问题,我不会猜到。谢谢你的建议:)