Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell中使用Gtk2hs和Glade的BASE64编码器GUI_Haskell_Gtk_Base64_Glade_Gtk2hs - Fatal编程技术网

Haskell中使用Gtk2hs和Glade的BASE64编码器GUI

Haskell中使用Gtk2hs和Glade的BASE64编码器GUI,haskell,gtk,base64,glade,gtk2hs,Haskell,Gtk,Base64,Glade,Gtk2hs,我有以下问题。我尝试使用Gtk2Hs和Glade为Haskell中的BASE64编码器创建一个简单的GUI。这是Haskell中BASE64编码器的示例 {-# LANGUAGE OverloadedStrings #-} import Data.ByteString.Base64 import Data.ByteString.Char8 main = do print $ unpack $ encode "Hello, world!" print $ decode "SGV

我有以下问题。我尝试使用Gtk2Hs和Glade为Haskell中的BASE64编码器创建一个简单的GUI。这是Haskell中BASE64编码器的示例

{-# LANGUAGE OverloadedStrings #-}

import Data.ByteString.Base64
import Data.ByteString.Char8

main = do
    print $ unpack $ encode "Hello, world!"
    print $ decode "SGVsbG8sIHdvcmxkIQ=="
现在我想为这个示例创建GUI,但我希望能够输入任何值进行编码。我已经创建了包含以下组件的模板: -entry1(输入要编码的值) -按钮(开始生成) -entry2(查看生成的值)

我的haskell代码:

entry1 <- builderGetObject hello castToEntry "entry1"
entry2 <- builderGetObject hello castToEntry "entry2"
button <- builderGetObject hello castToButton "button"
onClicked button $ do
    name2 <- get entry1 entryText
    set entry2 [ entryText := unpack $ encode name2]

name2
类型为
String
,而
encode
需要
ByteString
。最简单的方法是使用
Data.ByteString.Char8
中的
pack
函数进行转换。然而,这有一个问题:它只能对ASCII码点正常工作。如果用户输入非ASCII字符(לדומה、כה),会发生什么情况

相反,我建议使用UTF8编码文本。为此,我将使用
text
包,它看起来像:

import qualified Data.Text as T
import qualified Data.Text.Encoding as TE

encode $ TE.encodeUtf8 $ T.pack name2
import qualified Data.Text as T
import qualified Data.Text.Encoding as TE

encode $ TE.encodeUtf8 $ T.pack name2