【发布时间】:2014-12-23 08:25:55
【问题描述】:
Char 是 Haskell 中 Unicode 字符的类型,String 就是 [Char](即Char 项目的列表)。下面是一些简单的代码:
main = putStrLn "©" -- Unicode string
这段代码编译得很好,但是当我在 PowerShel.exe 或 cmd.exe 中运行它时出现运行时异常:
app.exe: : commitBuffer: 无效参数(无效字符)
为什么会这样?奇怪的是,当我在 C# 中做同样的事情时,我也没有例外:
Console.WriteLine("©");
在 .NET 中,字符也是 Unicode。 PowerShell 或 cmd 打印 c 而不是 ©,但至少我没有例外。如何让我的 Haskell 可执行文件顺利运行?
【问题讨论】:
-
可能是 Haskell 要求该程序在 unicode shell 中运行。
-
我的 cmd shell 打印
"©"很好,但在"ഠഃ അ ഠൃ ൩"上出现同样的错误。 -
可能有用:stackoverflow.com/questions/22349139/… 我不是 PowerShell 或 C# 专家,但是当您运行 C# 程序时发生某些字符替换(“c”而不是“©”)这一事实可能表明PowerShell 未设置为使用 UTF-8...@chi Unicode 字符串在 Mac OS X 上打印得很好;我通过终端使用 bash,它设置为使用 UTF-8。
-
@Jubobs 实际上,在 linux 上,终端也设置为 UTF-8,我从来没有遇到过问题。 @Bush 如果您只想避免异常,您可以在终端中使用
chcp 65001——不过,所有非 ascii 字符都将不可读。 -
@Bush 您是否使用
chcp.com 65001设置了代码页?