Character encoding 为什么是JDK8';s Base64使用ISO-8859-1?

Character encoding 为什么是JDK8';s Base64使用ISO-8859-1?,character-encoding,base64,ascii,java-8,iso-8859-1,Character Encoding,Base64,Ascii,Java 8,Iso 8859 1,我正在为一些受限环境编写自己的BASE64编码器/解码器 我发现它使用ISO-8859-1从这些编码字节构造字符串 我完全相信ISO-8859-1charset也涵盖了所有base64字母 是否有任何可能的理由不使用US-ASCII?我怀疑它更有效:从ISO-8859-1转换回文本只是将每个字节直接升级为字符,而对于ASCII,您需要检查字节是否为有效的ASCII。当然,base64的结果总是相同的 (这只是一个猜测,但很有教育意义。如果你想验证它,你可以随时运行基准测试…代码证明你是对的。直接

我正在为一些受限环境编写自己的BASE64编码器/解码器

我发现它使用
ISO-8859-1
从这些编码字节构造字符串

我完全相信
ISO-8859-1
charset也涵盖了所有base64字母


是否有任何可能的理由不使用
US-ASCII

我怀疑它更有效:从ISO-8859-1转换回文本只是将每个
字节直接升级为
字符,而对于ASCII,您需要检查
字节是否为有效的ASCII。当然,base64的结果总是相同的


(这只是一个猜测,但很有教育意义。如果你想验证它,你可以随时运行基准测试…

代码证明你是对的。直接委托给一个构造函数,该构造函数已被弃用,因为它仅适用于
hibyte==0
(读取iso-latin-1)用法,对于该用法,is有一个优化的复制循环。因此,在这种特定情况下,这是一种合理和优化的用法。尽管如果文档告诉它在使用相同的实现时使用US-ASCII,它也会起作用。但是在文档中说“ISO-8859-1”对于潜在的实现者来说是一个很好的指针,暗示在这里使用ISO-latin-1比使用ASCII更可取…@Holger:这对于任何一起查看实现和文档的人来说都是非常混乱的:)伙计们,对不起,我很困惑。因此,
ISO-8859-1
实际上比
US-ASCII
更有效,或者编写
Base64
的人决定使用不推荐的构造函数,它与任何字符集都没有关系,并注意到提及
ISO-8859-1
会更好。@JinKwon:你说的“更有效”是什么意思?它的性能优于ASCII,实际上是ISO-8859-1。