【问题标题】:Outputing UTF-8 string on Mac OS's Terminal在 Macos 终端上输出 UTF-8 字符串
【发布时间】:2010-05-29 16:40:38
【问题描述】:

我在 haskell 中有一个程序使用包 utf8-string 输出 utf-8,并且只使用该包的输出函数。

我以这种方式设置了我写入的每个文件的编码:

hSetEncoding myFile utf8
{- myFile may be stdout -}

但是当我尝试输出时:

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

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

α 

奇怪的是,即使我尝试将输出写入文件,我也无法使用 mvim 作为 utf-8 文件将其读回。有什么办法可以得到正确的行为

【问题讨论】:

  • 我认为您的意思是 toEnum 而不是 fromEnum
  • utf8-string 与 GHC 原生编码内容(设置句柄的编码)结合使用似乎会导致双重转义。在支持指定句柄编码之前,我只在早期的 GHC 上使用过utf8-string

标签: haskell utf-8 macos terminal


【解决方案1】:

刚刚在 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 删除了我的问题,我不会猜到。感谢您的想法:)
【解决方案2】:

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

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

alt text http://files.droplr.com.s3.amazonaws.com/files/35740123/15WO3z.Picture%2026.png

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

【讨论】:

  • 你指的是哪个文件——输出文件还是源文件?
  • 您有输出文件吗?我以为输出在终端中...输入文件必须以 UTF8 编码。但在你的情况下,我认为问题在于终端的编码。
猜你喜欢
  • 2014-12-12
  • 1970-01-01
  • 2014-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多