From 49d6bcf463ccc649ea482968a3b00f8ce0b561aa Mon Sep 17 00:00:00 2001 From: John Millikin Date: Mon, 26 Apr 2010 04:23:47 +0000 Subject: [PATCH] Treat strings retrieved from libXML as UTF8. --- Network/Protocol/XMPP/XML.hs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Network/Protocol/XMPP/XML.hs b/Network/Protocol/XMPP/XML.hs index 78fd9c7..4653706 100644 --- a/Network/Protocol/XMPP/XML.hs +++ b/Network/Protocol/XMPP/XML.hs @@ -23,7 +23,8 @@ module Network.Protocol.XMPP.XML ) where import Control.Monad.Trans (MonadIO, liftIO) import qualified Data.ByteString.Char8 as C8 -import qualified Network.Protocol.XMPP.Handle as H +import qualified Data.Text as T +import qualified Data.Text.Encoding as TE -- XML Parsing import Text.XML.HXT.Arrow ((>>>)) @@ -95,17 +96,17 @@ blockToTrees (begin:rest) = let end = (last rest) in case (begin, end) of [XN.mkElement (convertQName qname') (map convertAttr attrs) (eventsToTrees (init rest))] - (SAX.Characters s, _) -> [XN.mkText s] + (SAX.Characters s, _) -> [XN.mkText $ utf8 s] (_, SAX.ParseError text) -> error text _ -> [] convertAttr :: SAX.Attribute -> DOM.XmlTree convertAttr (SAX.Attribute qname' value) = XN.NTree (XN.mkAttrNode (convertQName qname')) - [XN.mkText value] + [XN.mkText $ utf8 value] convertQName :: SAX.QName -> DOM.QName -convertQName (SAX.QName ns _ local) = qname ns local +convertQName (SAX.QName ns _ local) = qname (utf8 ns) (utf8 local) ------------------------------------------------------------------------------- -- Utility functions for building XML trees @@ -124,3 +125,6 @@ qname :: String -> String -> DOM.QName qname ns localpart = case ns of "" -> DOM.mkName localpart _ -> DOM.mkNsName localpart ns + +utf8 :: String -> String +utf8 = T.unpack . TE.decodeUtf8 . C8.pack -- 2.34.7