web-dev-qa-db-ja.com

UTF8 / UTF16とBase64のエンコーディングの違いは何ですか

に。 C#

以下のクラスを使用してエンコードを実行できます。

  • _System.Text.Encoding.UTF8_
  • _System.Text.Encoding.UTF16_
  • _System.Text.Encoding.ASCII_

_System.Text.Encoding.Base64_がないのはなぜですか?

Convert.From(To)Base64Stringメソッドしか使用できません。base64の特別な点は何ですか?

Base64はUTF-8と同じエンコード方法だと言えますか?または、UTF-8はbase64の1つですか?

49
Zhongmin

UTF-8およびUTF-16は、Unicode文字列をエンコードする方法ですバイトシーケンス。

参照: すべてのソフトウェア開発者が絶対的かつ積極的にUnicodeと文字セットについて知っておくべき絶対的な最小値(言い訳なし!)

Base64は、バイトシーケンスを文字列にエンコードする方法です。

したがって、これらは大きく異なる概念であり、混同しないでください。

留意すべきこと:

  • すべてのバイトシーケンスがUTF-8またはUTF-16でエンコードされたUnicode文字列を表すわけではありません。

  • すべてのUnicode文字列がBase64でエンコードされたバイトシーケンスを表すわけではありません。

83
dtb

Base64はbinaryデータをエンコードする方法ですが、UTF8とUTF16はUnicodeテキストをエンコードする方法です。 Python 2.x、バイナリデータと文字列が混在しているような言語では、同じ方法で文字列をbase64またはutf8にエンコードできます。

u'abc'.encode('utf16')
u'abc'.encode('base64')

しかし、2種類のデータがより明確に分離されている言語では、データを表現する2つの方法には一般にまったく異なるユーティリティがあり、懸念を区別します。

17
Mike Axiak

UTF-8は他の TFエンコーディング のようなものです nicode文字セットUCS の文字をエンコードする文字エンコーディング。

Base64 は、印刷可能な文字のシーケンス(つまり、AZaz09+、および/)。

Base64はnottext encodingであるため、System.Text.Encoding.Base64はありません。むしろ hexadecimal のようなベース変換で、09AF(またはaf)を使用して数値を表します。

14
Gumbo

簡単に言えば、UTF8やUTF16などの文字エンコードは、数字、つまりバイトを文字に、またはその逆に一致させるのに便利です。たとえば、ASCII 65は "A"に一致しますが、エンコードは主にバイトをバイトに変換するために使用されるため、単一バイトから変換された結果のバイトは印刷可能で、ASCII文字エンコードのサブセットです。そのため、Base64はバイトからテキストへのエンコーディングメカニズムBase64を使用する主な理由は、バイナリデータ転送が許可されていないチャネルを介したデータの送信であるため、ストリームを表示するBase64でエンコードされたストリームを使用できることは明らかです。 UTF8エンコード。

0
S.Bozzoni