2

UTF-8 文字列を ASCII-7 に格納する簡単で効率的な方法を探しています。効率的とは、次のことを意味します。

  • 入力内のすべての ASCII 英数字文字は、出力でも同じ ASCII 英数字文字のままである必要があります
  • 結果の文字列はできるだけ短くする必要があります
  • 操作は、データを失うことなく元に戻すことができる必要があります
  • 結果の ASCII 文字列は大文字と小文字を区別しない必要があります
  • 入力長に制限はありません
  • UTF-8 の範囲全体を許可する必要があります

私の最初のアイデアは、最初の 4 つの要件に適合する Punycode (IDNA) を使用することでしたが、最後の 2 つの要件で失敗しました。

誰かが別のエンコード方式を推奨できますか? 参照できるコードがあればさらに良いでしょう。

4

6 に答える 6

4

UTF-7、または透過性はわずかに劣りますが、より広く普及している quoted-printable

入力内のすべての ASCII 文字は、出力でも ASCII 文字のままにする必要があります

(エスケープとして機能するキャラクターが少なくとも1 人必要なため、明らかに完全には不可能です。)

于 2010-04-02T15:02:31.373 に答える
2

ASCII は 7 ビット値の全範囲をカバーするため、すべての ASCII 文字を保持し、長さが 7 ビットであり、Unicode の全範囲をエンコードするエンコード方式は不可能です。

追加するために編集:

私は今あなたの要求を理解していると思います. UTF-8 文字列を 7 ビット コードにエンコードする方法を探しています。エンコードされた文字列が ASCII テキストとして解釈された場合、アルファベット文字の大文字と小文字が任意に変更されても、デコードされた文字列はバイトごとにオリジナルと同一であること。

その場合、おそらく最善の策は、元のバイナリ表現を 16 進数の文字列としてエンコードすることです。あなたがよりコンパクトな表現を探していることは知っていますが、システムの他の制約を考えると、カスタム エンコーディングが考案されない限り、それはかなり難しい注文です。

16 進表現は任意の 2 進値をエンコードできるため、16 進値を取得する前に文字列を圧縮することで文字列を縮小できる場合があります。

于 2010-04-02T15:02:54.837 に答える
1

非標準スキームについて話している場合 - MECE

于 2011-12-05T09:57:34.430 に答える
0

URLエンコードまたは数字参照は2つの可能なオプションです。

于 2010-04-02T15:05:39.667 に答える
0

文字列内の文字の分布によって異なります。

Quoted-printableは、「=」と制御文字を除いてオーバーヘッドがないため、ほとんどがASCII文字列に適しています。ただし、非ASCII文字はそれぞれ6〜12バイトの効率が悪いため、それらが多数ある場合は、代わりにUTF-7またはBase64を検討することをお勧めします。

于 2010-04-03T04:35:34.243 に答える