Проблема с кодом мусора в Java
Недавно, когда я занимаюсь проектами, я часто сталкиваюсь с искаженными проблемами с кодом в Java, поэтому я потратил время, чтобы разобраться с искаженными проблемами с кодом и как справиться с ними. Здесь я их собрал.
анализировать
Кодирование и декодирование
Кодирование - это преобразование символов в байты, а декодирование - это преобразование байтов в символы.
Байтовый поток и поток символов
Чтение и написание файлов все реализовано через байтовые потоки. Даже если в Java есть поток символов, базовый слой все еще использует байтовый поток.
Проблема с кодом мусора возникает
Наиболее часто используемыми персонажами в Java являются персонажи. Когда мы читаем файл в память и отображаем его в консоли (Byte Stream ---> Steams Steam), нам нужно использовать декодирование. Если файл кодирует UTF-8, и мы неправильно используем его в GBK при декодировании (если кодирование не указано, Java примет кодирование системы по умолчанию), чтобы декодировать его, то может отображаться только искаженный код. Когда мы пишем файлы, лучше всего указать кодирование (UTF-8).
Решение
Пример 1
При преобразовании байтового потока в поток символов мы указываем формат кодирования. Это наш файл также должен быть закодирован GB2312
public Static String Read (String FileName) Throws Exception {inputStream IS = new FileInputStream (имя файла); BufferedReader in = new BufferedReader (новый InputStreamReader (IS, "GB2312")); // Укажите строку формата кодирования; StringBuilder SB = new StringBuilder (); while ((s = in.readline ())! = null) {sb.append (s + "/n"); } in.close (); вернуть sb.toString ();} Пример 2
Прочитайте непосредственно через байтовый поток и укажите кодирование при преобразовании его в символы, используя строку.
пакет com.dy.xidian; import java.io.fileinputStream; import java.io.inputStream; Class BufferedInputFile {public Static String Read (String FileName) Throws Exception {@SuppressWarnings («Ресурс») inputStream IS = new FileInptream (filName); байт [] b = новый байт [1024]; is.read (b); вернуть новую строку (B, "GB2312"); }} public class memoryInput {public static void main (string [] args) бросает exection {string filename = "e: /html/gb2312.php"; String s = bufferedinputfile.read (имя файла); System.out.println (s); }}ловушка
В операциях ввода/вывода есть класс FileReader. Этот класс скрывает детали потоковой передачи байтов в потоки символов, которые мы можем использовать таким образом. BufferedReader in = new BufferedReader (новый FileReader (имя файла)); Таким образом, мы напрямую получаем поток персонажа. Но мы обнаружили, что мы не установили кодирование, потому что метод кодирования по умолчанию принят в FileReader. Это становится очень опасным. Если его формат кодирования по умолчанию отличается от кодирования нашего файла, то данные чтения должны быть искажены. Таким образом, нам лучше использовать метод в примере для преобразования потока.
Спасибо за чтение, я надеюсь, что это поможет вам. Спасибо за поддержку этого сайта!