在Haskell中运行外部程序时维护Unicode字符

在Haskell中运行外部程序时维护Unicode字符,haskell,unicode,Haskell,Unicode,我试图通过在stdin中传递惰性文本来运行外部命令。文本包含unicode字符,但它们在输出中未正确显示。下面是一个外部命令为tee的简单示例。对于shell实用程序,我使用这个包 解码为 (fromStrict . decodeUtf8 . fromString) c 编辑: 我无法用shellmate修复此问题,因此开始使用System.Process import qualified System.IO as IO (Just inp, Just outp, _, phandle) &

我试图通过在stdin中传递惰性文本来运行外部命令。文本包含unicode字符,但它们在输出中未正确显示。下面是一个外部命令为
tee
的简单示例。对于shell实用程序,我使用这个包

解码为

(fromStrict . decodeUtf8 . fromString) c
编辑:

我无法用shellmate修复此问题,因此开始使用
System.Process

import qualified System.IO as IO

(Just inp, Just outp, _, phandle) <-
  P.createProcess
    (P.proc "tee" [])
    { P.std_out = P.CreatePipe, P.std_in = P.CreatePipe }

IO.hSetEncoding inp IO.utf8
IO.hSetEncoding outp IO.utf8

IO.hPutStr inp someText

outputText <- IO.hGetContents outp
将合格的System.IO导入为IO

(只需输入,只需输出,u,幻影)您的终端是否正常,也就是说,您能否
echo×
并获得正确的输出?请尝试“打印一些文本”。这将打印转义版本,以便您可以查看其中的代码点。ASCII集合之外的Unicode将显示为反斜杠八进制代码。例如,打印“ê”将发出“\234”。是的,
echo×
在我的终端上工作,
print“×”
在GHCi打印
“\215”
,我想这是正确的。你的终端正常吗,也就是说,你能
echo×
并获得正确的输出吗?试着“打印一些文本”。这将打印转义版本,以便您可以查看其中的代码点。ASCII集合之外的Unicode将显示为反斜杠八进制代码。例如,打印“ê”将发出“\234”。是的,
echo×
在我的终端上工作,
print”ד
在GHCi打印
“\215”
,我想这是正确的。
(fromStrict . decodeUtf8 . fromString) c
import qualified System.IO as IO

(Just inp, Just outp, _, phandle) <-
  P.createProcess
    (P.proc "tee" [])
    { P.std_out = P.CreatePipe, P.std_in = P.CreatePipe }

IO.hSetEncoding inp IO.utf8
IO.hSetEncoding outp IO.utf8

IO.hPutStr inp someText

outputText <- IO.hGetContents outp