让Haskell程序在Wine环境下采用UTF8语言环境

8
我正在尝试使用Wine上的GHC为Windows构建我的Haskell应用程序。到目前为止,这很顺利,但我卡在了运行测试套件上,这个测试套件旨在在UTF8语境下运行(例如LANG=C.utf8)。
不幸的是,在Wine下,Haskell运行时始终认为我想要使用非Unicode代码页:
$ wine ghc -e 'GHC.IO.Encoding.CodePage.localeEncoding'
CP850
$ LANG=C.utf8 wine ghc -e 'GHC.IO.Encoding.CodePage.localeEncoding'
CP437
$ LC_ALL=C.utf8 wine ghc -e 'GHC.IO.Encoding.CodePage.localeEncoding'
CP437

除了更改实际代码以设置所有句柄的编码之外:我该如何使Haskell程序在此处使用UTF-8(即代码页65001)?


我没有理由相信环境变量会影响代码页 - 不幸的是。 - Joachim Breitner
另外,你尝试过使用更强的 LC_ALL 而不是 LANG 吗?我只是瞎猜。 - dfeuer
1
是的,我做了。为了完整起见修改了问题。 - Joachim Breitner
通过设置代码页在Windows批处理文件中运行测试套件是否有帮助? - Ørjan Johansen
@ØrjanJohansen:可能可以,但我该怎么设置呢?据我所知,在WINE中没有chcp命令。 - Joachim Breitner
显示剩余2条评论
2个回答

2

我这里没有Wine/Haskell的设置,因此需要多加谨慎。看起来GHC.IO.Encoding可能有适合这个问题的解决方案:

setLocaleEncoding :: TextEncoding -> IO () 
utf8 :: TextEncoding

在测试程序开始之前,您可以尝试使用setLocaleEncoding utf8设置编码方式。虽然这不完全符合您的要求,但如果可行的话,似乎比为每个句柄单独设置更容易。


谢谢。我真的想要一个不修改代码的东西,这样我就可以测试程序,就好像它在启用utf8的用户机器上运行一样。我会继续搜索。 - Joachim Breitner
这样做行不通,因为setLocaleEncoding不会影响localeEncoding:https://hackage.haskell.org/package/base-4.19.0.0/docs/System-IO.html#v:localeEncoding。说实话,相当令人困惑。而且,它对可能被生成的子进程不会有任何改变。我唯一可靠的方法是通过环境变量。 - undefined
@SebastianGraf 哎呀,localeEncoding 看起来像一团糟糕的混乱,最好根本就不应该存在。你知道如何在 Wine 下设置环境变量吗?如果知道的话,你应该自己添加你的答案。 - undefined
不好意思,我没有。我只是在谷歌上搜索解决方案时偶然发现了这个帖子,而且并不涉及环境变量。显然,没有这样的解决方案。 - undefined

0

我不知道这是否适用于 Wine,但您是否尝试使用 CHCP 命令设置当前的 Windows 代码页?


这就是我在真正的Windows上向我的用户推荐的。不幸的是,在WINE中该命令不可用。 - Joachim Breitner
遗憾...好吧,值得一试! - MathematicalOrchid

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