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-8UTF-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')

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

【讨论】:

+1 Base64 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 是一种用可打印字符序列表示任何字节序列的编码(即AZaz09+、和/)。

没有 System.Text.Encoding.Base64 因为 Base64 不是文本编码,而是像 hexadecimal 这样使用 09A 的基本转换–F(或af)来表示数字。

【讨论】:

【参考方案4】:

简单来说,字符编码,如 UTF8 或 UTF16 可用于匹配数字,即字节到字符,反之亦然,例如 ASCII 65 匹配到 "A" ,而基本编码主要用于翻译字节到字节,以便从单个字节转换的结果字节是可打印的,并且是 ASCII 字符编码的子集,因此您可以将 Base64 也视为字节到文本编码机制。使用 Base64 的主要原因是通过不允许二进制数据传输的通道传输数据。 也就是说,现在应该清楚的是,您可以使用 Base64 编码的流来呈现 UTF8 编码的流。

【讨论】:

“字节到字节”:不是真的(但在 C 之类的语言中可能看起来像这样)。目的是获取可以在下游处理的文本,可能在基于文本的包装器中(例如 XML、html、SMTP)。然后必须使用相互理解的字符编码对该文本进行字符编码(或者它可能已经由特定库的 Base64 实现)。有人可能会说字符编码应该是字节相同的众多字符编码之一(如果必须的话,可以称之为 ASCII);或者,可能是 UTF-16,它们会非常不同。

以上是关于UTF8/UTF16和Base64在编码方面有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

把图片转成base64编码有啥好处吗?

用base64编码图像有啥效果?

一句话理解字符编码(Unicode ,UTF8,UTF16)

老三编码格式小工具1.0下载

node.js的Buffer类

使用C ++将越南语字符编码为USASCII,ISO88591,UTF8,UTF16BE,UTF16LE,UTF16