Tôi đã cố gắng sử dụng java.io.FileReader để đọc một số tệp văn bản và chuyển đổi chúng thành một chuỗi, nhưng tôi thấy kết quả được mã hóa sai và hoàn toàn không thể đọc được.
Đây là môi trường của tôi:
Windows 2003, hệ điều hành mã hóa: CP1252
Java 5.0
Các tệp của tôi được mã hóa UTF-8 hoặc mã hóa CP1252 và một số trong số chúng (các tệp được mã hóa UTF-8) có thể chứa các ký tự tiếng Trung (không phải tiếng Latinh).
Tôi sử dụng mã sau đây để thực hiện công việc của mình:
private static String readFileAsString(String filePath)
throws java.io.IOException{
StringBuffer fileData = new StringBuffer(1000);
FileReader reader = new FileReader(filePath);
//System.out.println(reader.getEncoding());
BufferedReader reader = new BufferedReader(reader);
char[] buf = new char[1024];
int numRead=0;
while((numRead=reader.read(buf)) != -1){
String readData = String.valueOf(buf, 0, numRead);
fileData.append(readData);
buf = new char[1024];
}
reader.close();
return fileData.toString();
}
Các mã trên không hoạt động. Tôi thấy mã hóa của FileReader là CP1252 ngay cả khi văn bản được mã hóa UTF-8. Nhưng JavaDoc của java.io.FileReader nói rằng:
Các hàm tạo của lớp này giả định rằng mã hóa ký tự mặc định và kích thước bộ đệm byte mặc định là phù hợp.
Điều này có nghĩa là tôi không bắt buộc phải tự mình thiết lập mã hóa ký tự nếu tôi đang sử dụng FileReader? Nhưng hiện tại tôi đã nhận được dữ liệu được mã hóa sai, cách chính xác để xử lý tình huống của tôi là gì? Cảm ơn.