は、私はUTF8文字列"Hello Snowman ☃!"
を持っていると言います。それは16文字を持ち、18バイトを占有します。この文字列のバイト数を表示するにはどうすればよいですか?は、どのように私はUTF8文字列のバイト数を取得するのですか?
私はData.ByteArray、Data.Text、延ByteStringを使用して、私は短いが出ているそれぞれの場合に試してみました。
は、私はUTF8文字列"Hello Snowman ☃!"
を持っていると言います。それは16文字を持ち、18バイトを占有します。この文字列のバイト数を表示するにはどうすればよいですか?は、どのように私は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'で今も運が良かったと思います。それはまた、私に正しい価値を与えてくれました。あなたのものはより簡潔に見えます。 –
(あなたがHaskellのメモリに意味しない限り、私はあなたが、その場合には、この文字列は確かに18バイトを占有していないしていないかなり確信している)文字列は、 'X'バイトを取りません。特定のエンコーディング*の文字列*は 'x'バイトを占めます。実際、UTF8文字列としてエンコードされている、 "Hello Snowman☃!" 'は18バイトを占めます。しかし、Haskellの 'String'はエンコーディングを持っていません。あなたの好みのエンコーディングで文字列をエンコードし、エンコードされた式の長さを計算してください。 – user2407038
は多くの私を助けたこと、ありがとうございます。 –