当前位置:  开发笔记 > 编程语言 > 正文

将utf-8编码的字符串编组到Haskell文本并返回的正确方法是什么?

如何解决《将utf-8编码的字符串编组到Haskell文本并返回的正确方法是什么?》经验,为你挑选了1个好方法。

我有C字符串保证是UTF-8编码.使用简单的字符串,我会这样做(假设我们可以使用packunpack):

result <- peekCString cstr
free cstr -- ? not really important here
return (T.pack result)

并使用字符串:

withCString (T.unpack str) $ \cstr ->
  use_string cstr

这些功能的问题在于

它们将使用由当前区域设置确定的编码

...但我知道它总是应该是UTF-8,如果当前的语言环境指定不同的编码,我会得到错误的结果.

那么,我应该如何处理来回的编组Text



1> hao..:

尝试使用ByteString中间类型,而不是String,因为这将允许您使用Data.Text.Encoding手动解码和编码字符串.

module Main where

import Data.ByteString
import Data.Text
import Data.Text.Encoding
import Foreign.C.String
import Foreign.Marshal.Alloc

decode :: CString -> IO Text
decode cstr = do
  bytestr <- packCString cstr
  return (decodeUtf8 bytestr)

encode :: Text -> (CString -> IO a) -> IO a
encode text cont =
  useAsCString (encodeUtf8 text) cont

呜,进口派对.

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有