[英]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.