テキストまたはバイト列
質問
ごきげんよう。
私が今Haskellについて嫌いなことの一つは、文字列を扱うためのパッケージの量です。
最初に私はネイティブのHaskell
[Char]
の文字列を使っていましたが、Haskellのライブラリを使い始めると、果てしない変換で完全に迷子になってしまいました。パッケージによって文字列の実装が違うようで、独自の手作りのものを採用しているところもあります。
次に、私は自分のコードを
Data.Text
という文字列と
OverloadedStrings
を拡張する場合、私は
Text
を選択しましたが、多くのプロジェクトが
ByteString
.
誰か、どちらかを使うべき理由を簡単に教えてください。
PS:どのように変換するためにtw
Text
から
ByteString
?
期待された型と一致しません Data.ByteString.Lazy.Internal.ByteStringにマッチしませんでした。 推論された型に対して テキスト 期待される型 IO データ.ByteString.Lazy.Internal.ByteString 推測される型 IO Text
試しに
encodeUtf8
から
Data.Text.Encoding
に変更しましたが、うまくいきませんでした。
期待された型にマッチしませんでした。 Data.ByteString.Lazy.Internal.ByteStringにマッチしませんでした。 推論された型に対して Data.ByteString.Internal.ByteString。
UPDです。
回答ありがとうございます、その*Chunksの良さは行く方法のように見えますが、私は結果にややショックを受けました、私の元の関数は次のようになりました。
htmlToItems :: Text -> [Item]
htmlToItems =
getItems . parseTags . convertFuzzy Discard "CP1251" "UTF8"
となりました。
htmlToItems :: Text -> [Item]
htmlToItems =
getItems . parseTags . fromLazyBS . convertFuzzy Discard "CP1251" "UTF8" . toLazyBS
where
toLazyBS t = fromChunks [encodeUtf8 t]
fromLazyBS t = decodeUtf8 $ intercalate "" $ toChunks t
そうそう、この関数は間違っているから動作しないのです。
Text
を指定すれば、このテキストは適切にエンコードされていてすぐに使えると確信できますし、それを変換するのは愚かなことですが、このような冗長な変換はやはり
htmltoItems
.
どのように解決するのですか?
ByteStrings
は主にバイナリデータに有用ですが、ASCII文字セットしか必要ない場合は、テキストを処理する効率的な方法でもあります。ユニコード文字列を処理する必要がある場合は
Text
. しかし、どちらも他を置き換えるものではなく、一般に異なる目的で使用されることを強調しておかなければなりません:一方
Text
は純粋なユニコードを表しますが、バイナリの
ByteString
表現との間でエンコードする必要があります。
ユニコードの基本に関する良い記事があります。ユニコードのコードポイント(
Text
) とエンコードされたバイナリバイト (
ByteString
):
すべてのソフトウェア開発者が Unicode と文字セットについて絶対に、絶対に知っておかなければならない最低限事項
このような場合 データ.テキスト.エンコーディング モジュールを使って2つのデータ型を変換するか、あるいは Data.Text.Lazy.Encodingを使用します。 を使うかです (エラーメッセージからするとそうなっているようです)。
関連
-
[解決済み] Goで複数行の文字列はどのように書くのですか?
-
[解決済み] Luaで文字列の中にマッチするテキストがあるかどうかを確認するには?
-
[解決済み] Linuxで特定のテキストを含むすべてのファイルを検索するにはどうすればよいですか?
-
[解決済み] テキストファイルを文字列変数に読み込んで、改行を除去するには?
-
[解決済み] MySQLです。大きなVARCHARとTEXTの比較?
-
[解決済み] 文字列からテキストを削除するには?
-
[解決済み] textとvarcharの違い(character varying)
-
[解決済み】文字列をテキストファイルに出力する
-
[解決済み】Java7で文字列からパスを作成する。
-
[解決済み] Golangで文字列をint64に変換する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] strconv.Atoi()で文字列を指定するとエラーが発生する。
-
[解決済み] UTF-32とUCS-4の違いは何ですか?
-
[解決済み] VBScriptにはsubstring()関数がありますか?
-
[解決済み] strconv.Atoi()で文字列を指定するとエラーが発生する。
-
[解決済み】ある文字列が他の文字列を含むかどうかを確認する
-
[解決済み】複数行の文字列リテラルの構文とは何ですか?
-
[解決済み】Objective-CのisEqualToStringのSwiftに相当するものは何ですか?
-
[解決済み] 文字列を数値に変換する[重複]。
-
[解決済み] Golangで文字列をint64に変換する
-
[解決済み] 文字列の最初の(または最後の)n文字を抽出する。