【发布时间】:2014-04-02 15:22:42
【问题描述】:
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()?我决定使用这种方法来自动定义用户操作系统的字符集。
【问题讨论】:
标签: java encoding internationalization findbugs