2

.netがバイト配列のbase64エンコーディングをサポートしていることは知っています。でも、もっと多くの文字を使えばもっとスペースを節約できると思いました。Unicodeが何千もの異なる文字をサポートしていることをどこかで読んだので、たとえばbase1024エンコーディングを使用してみませんか?そして、これが可能であれば、それを実装する方法についていくつかのガイドラインを与えることができます。ありがとう

4

4 に答える 4

12

Base64の目的は、バイナリデータを6ビット/文字に収まる形式で保存/転送して、一部のプロトコルによる制限を回避することです。このような制限がない場合、base64は適していません。スペースを節約するために設計されたことはありません。スペースを節約する必要があり、何でも自由に使用できる場合は、配列をバイナリデータとして保存するだけです。

于 2010-02-20T21:42:23.570 に答える
3

base64 のポイントは、エンコードの問題を回避することです。事実上、現在も稼働しているすべてのマシンが ASCII 文字セットに同意しています。とはいえ、キロワットを消費する EBCDIC マシンがまだ数台あるかもしれません。ASCII は 96 個の明確な文字のみをエンコードします。Base64 は、これらのうち 64 個とパディング文字を使用します。Base128はもう多すぎます。

Unicode について明確なものはありません。使用されている一般的なエンコーディングは、UTF7、UTF8、UTF16、UTF32、UCS-2、およびそれらの最小エンディアンとビッグエンディアンの種類です。Base1024 には 1024 の明確な文字が必要であり、誰もが同意するには多すぎます。エンコードされた範囲だけではないことに注意してください。Unicode チャートには多くの穴があり、ランダムに分散されています。

于 2010-02-20T22:04:39.420 に答える
0

2 バイト Unicode エンコーディング (UCS2) を使用するか、マルチバイト (UTF-8) を使用するかによって異なります。base 1024 は、base64 よりもわずかに優れているか、スペースを浪費します。これは、base 64 が 8 ビット バイトのうち 6 ビットを使用するためです。base64 に変換された生のバイナリ データは 4/3 大きくなります。(約1.333倍の成長)

ただし、UCS-2 (16 ビット) Unicode 文字を使用する base1024 は、16 ビットのうち 10 ビットしか使用しないため、8/5 のスペースが必要になります。UCS-2 を使用して base1024 に変換された生のバイナリ データは、元のサイズの 1.6 倍になります。これはbase64よりも悪いです。

代わりにUTF-8 Unicode を使用し、1 バイトまたは 2 バイトのエンコーディングを持つ Unicode 文字のみを使用するように注意した場合、2 文字から最大 1920 の一意のコード ポイントを取得でき、データ密度がわずかに向上します。 . (UTF-8 エンコードでは、追加の * ビット バイトごとに 6 ビットのみを使用してコード ポイントを示し、残りの 2 ビットは、さらに続くバイトがあることを示すために使用されます)

したがって、これは役に立ちません。base64 に変換する前に、データを圧縮する可能性を検討する必要があります。

于 2010-03-01T02:26:03.940 に答える