在Mac OS的终端上输出UTF-8字符串

4

我有一个使用Haskell编写的程序,使用了utf8-string包并仅使用该包的输出函数来输出utf-8。

我将每个要写入的文件的编码设置为以下方式:

hSetEncoding myFile utf8
{- myFile may be stdout -}

但是当我尝试输出时:
alpha = [toEnum 0x03B1] {- α -}

与在Linux上(或Windows文件中)得到的漂亮的字母不同,我得到了以下内容:

α 

奇怪的是,即使我尝试将输出写入文件,我也无法使用mvim以utf-8文件的形式读取它。有没有办法获得正确的行为?


我认为你是指__toEnum__而不是__fromEnum__。 - Thomas M. DuBuisson
在使用utf8-string与GHC本地编码设置(设置句柄的编码)组合时,似乎会导致双重转义。我只在早期的GHC上使用过utf8-string,那时还不支持指定句柄的编码。 - solidsnack
2个回答

3
我刚在 GHC 6.12 上尝试了这个。新的编码特性在这种简单情况下消除了对 utf8-string 的需求。
import System.IO

main                         =  do
  out alpha stdout

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

out s handle                 =  do
  hSetEncoding handle utf8
  hPutStrLn handle s

如果这对您在OS X上有用,请让我知道。下次请发布完整的代码--这会使我更容易帮助您。


有效地,删除utf8-string解决了我的问题,我从来没有想到过。谢谢你的建议 :) - Raoul Supercopter

1

你指的是哪个文件 -- 输出文件还是源文件? - solidsnack
你有一个输出文件吗?我以为输出在终端里...输入文件必须以UTF8编码。但在你的情况下,我想问题可能出在终端的编码上。 - Olivier Verdier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接