2017-07-03 10 views
1

は、私はUTF8文字列"Hello Snowman ☃!"を持っていると言います。それは16文字を持ち、18バイトを占有します。この文字列のバイト数を表示するにはどうすればよいですか?は、どのように私はUTF8文字列のバイト数を取得するのですか?

私はData.ByteArray、Data.Text、延ByteStringを使用して、私は短いが出ているそれぞれの場合に試してみました。

+2

(あなたがHaskellのメモリに意味しない限り、私はあなたが、その場合には、この文字列は確かに18バイトを占有していないしていないかなり確信している)文字列は、 'X'バイトを取りません。特定のエンコーディング*の文字列*は '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'で今も運が良かったと思います。それはまた、私に正しい価値を与えてくれました。あなたのものはより簡潔に見えます。 –

関連する問題