这是我的密码:
testSplice :: C.Splice Handler
testSplice = return $ C.yieldRuntimeText $ do
return "中文"我把它绑在标签上:
splices :: Splices (C.Splice Handler)
splices =
"testSplice" ## testSplice并在layout.tpl上使用:
<meta charset="UTF-8">
<testSplice/>浏览器上的输出是
-�我做错了什么?
抱歉,我已经忙了一段时间了,现在我回来了,我想我可能没有把这个问题说得足够具体,这里是问题发生的代码,我希望它能使问题更加说明:
test.hs:
{-# LANGUAGE OverloadedStrings #-}
import Snap
import Heist
import qualified Heist.Compiled as C
import Data.Monoid
import Control.Monad.Trans.Either
import Data.Maybe
main :: IO ()
main = quickHttpServe site
site :: Snap ()
site =
route [("/", testSnap)]
testSnap :: Snap ()
testSnap = do
hs <- liftIO $ load "template" splices
let runtime = fromJust $ C.renderTemplate hs "test"
builder <-liftIO (fst runtime)
writeBuilder builder
where
splices :: Splices (C.Splice IO)
splices =
"testSplice" ## testSplice
load :: MonadIO n
=> FilePath
-> Splices (C.Splice n)
-> IO (HeistState n)
load baseDir splices = do
tmap <- runEitherT $ do
let t = loadTemplates baseDir
hc = HeistConfig
defaultInterpretedSplices
defaultLoadTimeSplices
splices
mempty
[t]
initHeist hc
either (error . concat) return tmap
testSplice :: C.Splice IO
testSplice = return $ C.yieldRuntimeText $ do return "中文" 模板/test.tpl
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<testSplice/>
</body>
</html>现在我尝试了抢劫-0.13.0.2,它现在工作的很好,伟大的工作,丹尼尔!
发布于 2013-10-12 07:22:39
更新:这个答案中描述的问题已经在heist版本0.13.0.2中得到了纠正。
源代码 for yieldRuntimeText是:
yieldRuntimeText :: Monad n => RuntimeSplice n Text -> DList (Chunk n)
yieldRuntimeText = yieldRuntime . liftM fromTextfromText函数是从哪个模块产生的?在“进口”一节中我们发现:
import Blaze.ByteString.Builder
import Blaze.ByteString.Builder.Char8后一个包的文档说:
注意:这个包是为低级别使用的,比如实现协议.如果您需要序列化Unicode字符,请使用其中一个UTF编码(例如,“Blaze.ByteString.Builder.Char.UTF-8”)。
还包括:
fromText :: Text -> BuilderSource
O(n). Serialize the lower 8-bits of all characters in the strict text.也许问题是从文本到生成器的编码不是在UTF-8中完成的?尝试使用完全相同的代码定义您自己版本的yieldRuntimeText,但是使用以下导入:
import Blaze.ByteString.Builder
import Blaze.ByteString.Builder.Char.Utf8
yieldRuntimeTextUtf8 :: Monad n => RuntimeSplice n Text -> DList (Chunk n)
yieldRuntimeTextUtf8 = yieldRuntime . liftM fromTexthttps://stackoverflow.com/questions/19329857
复制相似问题