Haskell中使用Gtk2hs和Glade的BASE64编码器GUI
我有以下问题。我尝试使用Gtk2Hs和Glade为Haskell中的BASE64编码器创建一个简单的GUI。这是Haskell中BASE64编码器的示例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
{-# 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