Các mã sau chuyển đổi một tập tin từ srcEncoding để tgtEncoding:
public static void transform(File source, String srcEncoding, File target, String tgtEncoding) throws IOException {
BufferedReader br = null;
BufferedWriter bw = null;
try{
br = new BufferedReader(new InputStreamReader(new FileInputStream(source),srcEncoding));
bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(target), tgtEncoding));
char[] buffer = new char[16384];
int read;
while ((read = br.read(buffer)) != -1)
bw.write(buffer, 0, read);
} finally {
try {
if (br != null)
br.close();
} finally {
if (bw != null)
bw.close();
}
}
}
--EDIT--
Sử dụng Try-với-nguồn (Java 7):
public static void transform(File source, String srcEncoding, File target, String tgtEncoding) throws IOException {
try (
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(source), srcEncoding));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(target), tgtEncoding));) {
char[] buffer = new char[16384];
int read;
while ((read = br.read(buffer)) != -1)
bw.write(buffer, 0, read);
}
}
Nguồn
2010-06-10 21:48:32
Không phải UTF8? Bạn muốn thu hẹp xuống một chút? Thật dễ dàng khi bạn biết mã hóa đầu vào, và về cơ bản là không thể nếu bạn không. –
một số cân nhắc, các tập tin là BIG (như 1GB) vì vậy tôi không thể đặt chúng trong một đối tượng String ... –
mã hóa tệp của bạn là gì? Nếu bạn đang sử dụng Linux hoặc OS X (và các Un * x khác), bạn có thể chỉ cần gõ: * file some_file * và nó sẽ cho bạn biết mã hóa. Btw, nếu bạn đang ở trên Un * x (ít nhất là cả Linux và OS X), bạn nên có dòng lệnh * iconv *. * "man iconv" * cho biết: * "Chuyển đổi mã hóa các tệp đã cho từ mã hóa này sang mã hóa khác" *, được cho là sẽ thực hiện công việc tốt hơn trên tệp 1GB so với sử dụng Java tự viết. Lưu ý rằng mã hóa UTF-8 có thể đại diện cho mỗi điểm mã Unicode đơn, do đó nói rằng tệp * "có một số ký tự không phải là utf8" * âm thanh đáng ngờ ... – NoozNooz42