Я действительно мало что знаю об операциях ввода-вывода. . . У меня также мало знаний о кодировании и искаженных символах. . . Сегодня я столкнулся с требованием преобразовать кодировку файла и вернуть закодированную строку, например исходную кодировку GBK, преобразованную в UTF-8.
Среди них не будет опубликован класс BytesEncodingDetect. В основном используется для получения формата кодировки файла.
Сначала я попробовал изменить метод кодирования непосредственно в исходном файле и использовать URLEncoder и URLDecoder для преобразования, но это все равно не сработало. Последнее слово нечетного числа на китайском языке искажено.
Baidu искала решение, но безуспешно, поэтому им пришлось перенять мою идею: сначала прочитать содержимое исходного файла, сохранить его в StringBuffer, затем удалить исходный файл, затем создать новый файл, а затем сохранить его в другом. форма кодирования.
Проверьте эффект кодирования. Будьте осторожны, не проверяйте эффект в eclipse. Eclipse просматривает его только в форме кодировки, поэтому вы можете просматривать HTML-файлы на стороне браузера. Чтобы просмотреть указанную кодировку, вы можете щелкнуть правой кнопкой мыши --- кодирование. чтобы определить, успешен ли он.
Скопируйте код кода следующим образом:
пакет com.test;
импортировать java.io.BufferedReader;
импортировать java.io.BufferedWriter;
импортировать java.io.File;
импортировать java.io.FileInputStream;
импортировать java.io.FileOutputStream;
импортировать java.io.InputStream;
импортировать java.io.InputStreamReader;
импортировать java.io.OutputStream;
импортировать java.io.OutputStreamWriter;
импортировать java.net.URLDecoder;
импортировать java.net.URLEncoder;
общественный класс Транскодирование {
частный BytesEncodingDetect кодировать = новый BytesEncodingDetect();
публичное транскодирование () {
}
/**
* Преобразование кода
* @param toCharset Кодировка для преобразования.
* @param path Путь к файлу, который нужно преобразовать.
* @возвращаться
* @throwsException
*/
общедоступная строковая кодировка (String toCharset, String path) выдает исключение {
Файл srcFile = новый файл (путь);
int index = encode.detectEncoding(srcFile);
Набор символов строки = BytesEncodingDetect.javaname[индекс];
// Кодировка та же, перекодировать не нужно
если (charset.equalsIgnoreCase(toCharset)) {
return «Кодировка та же, преобразование не требуется»;
}
InputStream in = новый FileInputStream (путь);
BufferedReader br = новый BufferedReader(
новый InputStreamReader(in, charset));
StringBuffer sb = новый StringBuffer();
Строка с1;
while ((s1=br.readLine())!=null) {
Строка s = URLEncoder.encode(s1, toCharset);
sb.append(s+"/r/n");//Одна строка + возврат каретки
}
бр.закрыть();
srcFile.delete();//Удалить исходный файл
//Переписываем файл с новой кодировкой и возвращаем значение
File newfile = new File(path);//Пересобираем исходный файл
новыйфайл.createNewFile();
OutputStream out = новый FileOutputStream (новый файл);
Writer OutputStreamWriter = новый OutputStreamWriter (out, toCharset);
BufferedWriter bw = новый BufferedWriter (писатель);
bw.write(URLDecoder.decode(sb.toString(), toCharset));
Результат строки = URLDecoder.decode(sb.toString(), toCharset);
bw.flush(); // Прошиваем в файл
чб.закрыть();
вернуть результат;
}
}