繁体   English   中英

在解析byte []时是否真的需要指定String编码?

[英]Is specifying String encoding when parsing byte[] really necessary?

据推测,“最佳实践”是从byte[]创建String时指定编码:

byte[] b;
String a = new String(b, "UTF-8"); // 100% safe
String b = new String(b); // safe enough

如果我知道我的安装具有utf8的默认编码,是否真的有必要将编码指定为“最佳实践”?

在这里必须区分不同的用例:如果您通过某种协议从外部源以指定的编码获取字节,则始终使用第一种形式(使用显式编码)。

如果字节的来源是本地计算机,例如本地文本文件,则第二种形式(无显式编码)更好。

请始终记住,您的程序可能会在具有不同平台编码的另一台计算机上使用。 它应该在那里工作,无需任何更改。

如果我知道我的安装具有utf8的默认编码,是否真的有必要将编码指定为“最佳实践”?

但是您确定您的安装将始终使用默认的UTF-8编码吗? (或者至少,只要使用您的代码...)

并且您确定您的代码永远不会在具有不同默认编码的其他安装中使用吗?

如果对上述任何一个的回答都是“否”(除非您有先见之明,否则可能必须是“否”),那么我认为您应该遵循最佳实践……并指定编码(如果这是您的应用程序语义)要求:

  • 如果要求始终以UTF-8编码(或解码),则使用"UTF-8"

  • 如果要求始终使用平台默认值进行编码(或解码),请执行此操作。

  • 如果要求支持多种编码(或者要求可能会更改),则使编码名称成为配置(或命令行)参数,解析为Charset对象并使用它。

此“最佳实践”建议的重点是避免平台特性发生变化时出现的可预见的问题。 您认为这不太可能,但是您可能无法完全确定。 但归根结底,这是您的决定。

(在我看来,您实际上在考虑“最佳实践”是否适合您的情况是一件好事……)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM