依赖默认编码,我应该使用什么,为什么?
2022-09-01 13:58:29
FindBugs 报告了一个错误:
对默认编码的依赖 找到对方法的调用,该方法将执行字节到字符串(或字符串到字节)的转换,并假定默认平台编码是合适的。这将导致应用程序行为因平台而异。使用备用 API 并显式指定字符集名称或字符集对象。
我像这样使用FileReader(只是一段代码):
public ArrayList<String> getValuesFromFile(File file){
String line;
StringTokenizer token;
ArrayList<String> list = null;
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(file));
list = new ArrayList<String>();
while ((line = br.readLine())!=null){
token = new StringTokenizer(line);
token.nextToken();
list.add(token.nextToken());
...
要更正错误,我需要更改
br = new BufferedReader(new FileReader(file));
自
br = new BufferedReader(new InputStreamReader(new FileInputStream(file), Charset.defaultCharset()));
当我使用PrintWriter时,发生了同样的错误。所以现在我有一个问题。当我可以(应该)使用FileReader和PrintWriter时,如果这不是很好的做法,请依靠默认编码?第二个问题是正确使用Charset.defaultCharset ()?我决定使用此方法自动定义用户操作系统的字符集。