在Haskell中运行外部程序时维护Unicode字符
我试图通过在stdin中传递惰性文本来运行外部命令。文本包含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) &
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