【问题标题】:haskell: output non-ascii charactershaskell:输出非ASCII字符
【发布时间】:2011-11-22 14:35:12
【问题描述】:

我想在 WinGHCi 中输出非 ascii 字符,但这是我得到的:

Prelude> "δ"
"\948"
Prelude> putStr "\948"
*** Exception: <stdout>: hPutChar: invalid argument (character is not in the code page)

我在 windows xp 上使用 WinGHCi 7.0.3。 我该怎么做才能让 WinGHCi 打印出漂亮的小增量?

【问题讨论】:

    标签: windows haskell non-ascii-characters


    【解决方案1】:

    适用于 OSX!

    Prelude> putStrLn "\948"
    δ
    

    听起来这是一个与haskell无关的Windows问题......

    【讨论】:

    • 这不是 Haskell 问题吗?当然,GHCi 应该能够正确地与其底层平台交互。其他程序以某种方式管理了这一令人难以置信的壮举。
    • 我想这不起作用,因为我当前的代码页。只是我不知道如何更改它,或者更好:如何让 GHCi 使用新的代码页。 chcp 命令不能解决问题。
    • GHCi 将字符提供给 windows,windows 抱怨它不知道如何处理它,因为它不在当前代码页中。 GHCi 不能神奇地选择具有该字符映射的代码页。充其量,应该有一种方法可以通过 FFI 调用 SetConsoleOutputCP 函数,但调用由您决定,而不是 GHCi。
    • 什么是 FFl?以及如何调用这个函数?
    • 外部函数接口,haskell 代码调用用其他语言编写的函数的一种方式。它记录在here。有一个维基页面here。我从来没有使用过它。您可以发布一个新问题。
    【解决方案2】:

    这是一个 WinGHCI 错误。使用 GHCI(控制台,非 GUI 版本)。

    UPD:这显然不完全正确(适用于希腊字母而不是西里尔字母)。

    【讨论】:

    • 您的控制台代码页是什么(chcp 命令)?我有 437 并且它有效。
    • 我有 CP 850,但无法更改。我在控制台中输入了 chcp 437,但它始终保持 CP 850。如果我将 stdout 设置为 utf8,那么 ghci 会打印一些奇怪的字符,但不会打印增量。
    • @Ingo:对我来说都不是,W7也是。
    • @Ingo Yay chcp 65001 在 Cygwin 工作。您应该将其添加为答案。
    猜你喜欢
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    相关资源
    最近更新 更多