说我有UTF8字符串"Hello Snowman ☃!"
。它有16个字符,占用18个字节。如何让Haskell向我显示这个字符串占用的字节数?在Haskell中,如何获得UTF8字符串中的字节数?
我试过使用Data.ByteArray,Data.Text,ByteString,并在每种情况下我都来了。
说我有UTF8字符串"Hello Snowman ☃!"
。它有16个字符,占用18个字节。如何让Haskell向我显示这个字符串占用的字节数?在Haskell中,如何获得UTF8字符串中的字节数?
我试过使用Data.ByteArray,Data.Text,ByteString,并在每种情况下我都来了。
你可以使用优秀的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.fromString
和BS.length
可能是您想要使用的功能,但您的字符串可能应该是已经字节串,因为您有兴趣编码它们需要多少字节。
谢谢。在Data.Text.Encoding中使用'Data.Text.pack'和'encodeUtf8'后,我想''Data.ByteArray.length'也有幸运了。这也给了我正确的价值。你的看起来更简洁。 –
一个字符串不占用'x'字节(除非你的意思是在Haskell内存中,但我敢肯定你没有,在这种情况下,这个字符串肯定不占用18个字节)。一个字符串*在特定的编码中占用'x'个字节。事实上,编码为UTF8字符串,“Hello Snowman☃!”占用18个字节。但是,Haskell'String'没有编码。使用首选编码对字符串进行编码并计算编码表达式的长度。 – user2407038
谢谢,帮了我很多。 –