Windows下运行stack bench(tasty-bench)出现编码错误求助
解决Windows下Haskell Stack Bench的编码错误(无法编码'\956')
问题根源
Windows默认控制台编码(多为CP1252或GBK)不支持Unicode字符μ(代码点U+00B5,对应Haskell中的'\956'),当基准测试输出包含该字符时,会触发编码失败的
可行解决方案
1. 临时切换控制台编码为UTF-8
在执行stack bench前,先在命令行执行:
chcp 65001
该命令将控制台编码切换为UTF-8,可完整支持Unicode字符输出。
2. 修改基准测试代码替换特殊字符
如果不想调整控制台环境,可直接修改测试代码,将μ替换为ASCII兼容的表述:
原代码示例:
putStrLn "操作耗时:250 μs"
修改后:
putStrLn "操作耗时:250 us" -- 或更清晰的写法 putStrLn "操作耗时:250 microseconds"
3. 指定Stack运行时编码选项
执行bench时直接附加RTS编码参数:
stack bench --rts-options=-encoding=utf8
也可以在stack.yaml中持久化配置:
benchmarks: your-benchmark-name: ghc-options: -with-rtsopts=-encoding=utf8
4. 使用Windows Terminal运行命令
Windows Terminal原生支持UTF-8编码,切换到该终端后执行stack bench,可避免编码兼容性问题。
内容的提问来源于stack exchange,提问作者Stéphane Laurent
相关产品推荐
相关产品推荐

