尝试打印Unicode字符时出现运行时异常

安德烈·布什曼

Char是Haskell中Unicode字符的类型,并且String很简单[Char](即Char项目列表)。这是一些简单的代码:

main = putStrLn "©" -- Unicode string

这段代码可以正常编译,但是当我在PowerShel.execmd.exe中运行它时,我得到了运行时异常

app.exe::commitBuffer:无效参数(无效字符)

为什么会这样?奇怪的是,当我在C#中执行相同操作时,我没有例外:

Console.WriteLine("©");

在.NET中,字符也是Unicode。PowerShellcmdc代替打印©,但至少我没有例外。如何使Haskell可执行文件平稳运行?

杰里米·李斯特

我认为这应该算作GHC中的错误,但是有一种解决方法。GHC程序中所有句柄(在二进制模式下打开的句柄除外)的默认编码只是控制台接受的编码,没有错误处理。幸运的是,您可以使用以下内容添加错误处理。

makeSafe h = do
  ce' <- hGetEncoding h
  case ce' of
    Nothing -> return ()
    Just ce -> mkTextEncoding ((takeWhile (/= '/') $ show ce) ++ "//TRANSLIT") >>=
      hSetEncoding h

main = do
  mapM_ makeSafe [stdout, stdin, stderr]
  -- The rest of your main function.

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

尝试生成多个进程时出现运行时错误(图像检测和打印到终端)

尝试在Android中创建倒数计时器时出现运行时异常和空指针异常

创建Blob时出现运行时异常

尝试使用pip时出现运行时错误

Excel VBA - 使用 .ModifyAppliesTo 和运行时错误 1004(尝试插入太长的字符串时出现问题?)

使用联合打印字符串时出现运行时错误。它不打印字符串值但打印整数值

运行Java构件时显示Unicode字符时出现问题,但在IntelliJ IDEA中运行时一切正常

尝试运行服务器时出现Django运行时错误

Excel 使用 VBA 第二次尝试打印时出现运行时错误“1004”粘贴范围类的特殊方法失败

尝试使用joda DateTimeFormatter解析日期时间时发生运行时异常

尝试开始活动时二进制XML运行时异常

为什么在Android中使用Recycler View时出现运行时异常

为什么在创建SqlClient类型时出现缺少的方法异常运行时?

当显示UIAlertController(actionsheet)iOS8时出现运行时异常

在 ubuntu 上安装 magento 2 时出现运行时异常

在 Android Studio 中使用 ListView 时出现运行时错误(空指针异常)

尝试访问已注册的单元的成员时出现运行时错误

尝试从Access创建MS Word文档文件时出现运行时错误5981

尝试添加图像时出现Microsoft VBScript运行时错误'800a0034'

尝试检索类字典时出现运行时错误451

尝试在图形中查找组件时出现运行时错误

尝试连接数据库表时出现运行时错误

Proguard导致Android导航组件出现运行时异常

运行时出现Google.Apis.Http.ConfigurableMessageHandler异常

从 CLI 运行时出现 CakePHP 3 / Phinx 异常

运行代码时遇到运行时异常

运行 .jar 文件时的 JavaFX 运行时异常

为什么在struct中使用字符串时出现运行时错误

运行Go代码时出现运行时错误