UTF8/UTF16和Base64在编码方面有啥区别
Posted
技术标签:
【中文标题】UTF8/UTF16和Base64在编码方面有啥区别【英文标题】:What's the difference between UTF8/UTF16 and Base64 in terms of encodingUTF8/UTF16和Base64在编码方面有什么区别 【发布时间】:2011-04-21 10:43:39 【问题描述】:在。 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】: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 编码的字节序列。
【讨论】:
【参考方案2】:Base64 是一种编码二进制数据的方法,而 UTF8 和 UTF16 是编码 Unicode 文本的方法。请注意,在 Python 2.x 这样的语言中,二进制数据和字符串混合在一起,您可以用同样的方式将字符串编码为 base64 或 utf8:
u'abc'.encode('utf16')
u'abc'.encode('base64')
但在两种数据类型之间有更明确分隔的语言中,两种表示数据的方式通常具有完全不同的实用程序,以保持关注点分开。
【讨论】:
+1Base64 is a way to encode binary data, while UTF8 and UTF16 are ways to encode Unicode text.
说明一切。【参考方案3】:
UTF-8 就像UTF encodings 中的另一个字符编码一样对Unicode character set UCS 的字符进行编码。
Base64 是一种用可打印字符序列表示任何字节序列的编码(即A
–Z
、a
–z
、0
–9
、+
、和/
)。
没有 System.Text.Encoding.Base64 因为 Base64 不是文本编码,而是像 hexadecimal 这样使用 0
–9
和 A
的基本转换–F
(或a
–f
)来表示数字。
【讨论】:
【参考方案4】:简单来说,字符编码,如 UTF8 或 UTF16 可用于匹配数字,即字节到字符,反之亦然,例如 ASCII 65 匹配到 "A" ,而基本编码主要用于翻译字节到字节,以便从单个字节转换的结果字节是可打印的,并且是 ASCII 字符编码的子集,因此您可以将 Base64 也视为字节到文本编码机制。使用 Base64 的主要原因是通过不允许二进制数据传输的通道传输数据。 也就是说,现在应该清楚的是,您可以使用 Base64 编码的流来呈现 UTF8 编码的流。
【讨论】:
“字节到字节”:不是真的(但在 C 之类的语言中可能看起来像这样)。目的是获取可以在下游处理的文本,可能在基于文本的包装器中(例如 XML、html、SMTP)。然后必须使用相互理解的字符编码对该文本进行字符编码(或者它可能已经由特定库的 Base64 实现)。有人可能会说字符编码应该是字节相同的众多字符编码之一(如果必须的话,可以称之为 ASCII);或者,可能是 UTF-16,它们会非常不同。以上是关于UTF8/UTF16和Base64在编码方面有啥区别的主要内容,如果未能解决你的问题,请参考以下文章