2017-07-03 85 views
1

说我有UTF8字符串"Hello Snowman ☃!"。它有16个字符,占用18个字节。如何让Haskell向我显示这个字符串占用的字节数?在Haskell中,如何获得UTF8字符串中的字节数?

我试过使用Data.ByteArray,Data.Text,ByteString,并在每种情况下我都来了。

+2

一个字符串不占用'x'字节(除非你的意思是在Haskell内存中,但我敢肯定你没有,在这种情况下,这个字符串肯定不占用18个字节)。一个字符串*在特定的编码中占用'x'个字节。事实上,编码为UTF8字符串,“Hello Snowman☃!”占用18个字节。但是,Haskell'String'没有编码。使用首选编码对字符串进行编码并计算编码表达式的长度。 – user2407038

+0

谢谢,帮了我很多。 –

回答

4

你可以使用优秀的utf8-string包。

import qualified Data.ByteString as BS 
import qualified Data.ByteString.UTF8 as UTF8 

numBytesUtf8 :: String -> Int 
numBytesUtf8 = BS.length . UTF8.fromString 

然后,用你的榜样,

ghci> numBytesUtf8 "Hello Snowman ☃!" 
18 

当然,你可能不应该摆在首位做这个。 UTF8.fromStringBS.length可能是您想要使用的功能,但您的字符串可能应该是已经字节串,因为您有兴趣编码它们需要多少字节。

+0

谢谢。在Data.Text.Encoding中使用'Data.Text.pack'和'encodeUtf8'后,我想''Data.ByteArray.length'也有幸运了。这也给了我正确的价值。你的看起来更简洁。 –

相关问题