在编码方面,UTF8 / UTF16和Base64之间有什么区别

时间:2010-10-05 17:53:05

标签: c# encoding utf-8 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之一?

4 个答案:

答案 0 :(得分:75)

UTF-8 UTF-16 是将Unicode字符串编码为字节序列的方法。

请参阅:The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

Base64 是一种将字节序列编码为字符串的方法。

因此,这些是截然不同的概念,不应混淆。

要记住的事情:

  • 并非每个字节序列都代表以UTF-8或UTF-16编码的Unicode字符串。

  • 并非每个Unicode字符串都代表Base64中编码的字节序列。

答案 1 :(得分:14)

Base64是一种编码二进制数据的方法,而UTF8和UTF16是编码Unicode文本的方法。请注意,在Python 2.x这样的语言中,二进制数据和字符串是混合的,您可以用相同的方式将字符串编码为base64或utf8:

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

但是在两种类型数据之间存在更明确分离的语言中,表示数据的两种方式通常具有完全不同的实用程序,以保持关注点分离。

答案 2 :(得分:13)

UTF-8与其他UTF encodings字符编码类似,可编码Unicode character set UCS的字符。

Base64是一种用一系列可打印字符表示任何字节序列的编码(即A - Za - z,{{ 1}} - 09+)。

没有 System.Text.Encoding.Base64 ,因为Base64 一个/,而是像hexadecimal这样的基本转换使用text encoding - 09 - A(或F - a)来表示数字。

答案 3 :(得分:0)

简单来说,像UTF8或UTF16这样的字符可用于匹配数字,即字节与字符匹配,反之亦然,例如ASCII 65中的字符与“ A”匹配,而基本编码则将字节转换为字节,因此从单个字节转换的结果字节是可打印的,并且是ASCII charachter编码的子集,因此,您也可以将Base64视为字节到文本的编码机制。 就是说,现在应该清楚的是,您可以拥有以Base64编码的流,它呈现了以UTF8编码的流。