8

ByteStrings をさまざまなエンコーディングから Text にデコードする必要がありますが、ByteStrings は不完全なフラグメントである可能性があります。理想的には、次のような署名を持つ関数が必要です。

decodeFragment :: Encoding -> ByteString -> (Text, ByteString)

これは、正常にデコードされた Text と、完全な Unicode 文字を形成しなかった残りのバイトを返します (したがって、次のフラグメントを取得するときにそれらのバイトを再利用できます)。

この種の関数は既にいくつかの Haskell ライブラリに存在しますか?それとも自分で作成する必要がありますか? 今のところ、UTF-8 を超えるエンコーディングをサポートしていないものから始めることもできます。

4

1 に答える 1

2

トリッキー。通常、エンコーディングは、テキストのエンコーディングとデコーディングに関する私の頼りになる提案ですが、あなたが求めているものとまったく同じものを提供するとは思えません。それが提供するという点で、それは近づいています

decodeChar :: (Encoding enc, ByteSource m) => enc -> m Char

を取得するために反復できますm String。によってスローされたエラーをキャッチするdecodeCharと、フラグメントの最後に到達したかどうかがわかります。Hackage の他のエンコーディング パッケージのいくつかをざっと見てみると、同じアプローチが必要になるか、内部で使用する上記のものに類似した機能を公開するためのパッチが必要になることが示唆されます。

于 2011-07-22T07:56:27.370 に答える