El problema de los primeros caracteres en la lista de materiales que se encuentran al leer archivos Unicode (UTF-8, etc.) en Java y cómo gestionarlos
Los archivos de texto creados con un editor de texto en Windows tendrán un ID de lista de materiales añadido al encabezado del archivo (el primer carácter) si decides guardarlos en un formato Unicode como UTF-8.
Esta identificación no se elimina cuando el archivo se lee en Java, y String.trim() no puede eliminarse. Si usas readLine() para leer la primera línea y almacenarla en la cadena, la longitud de la cadena será 1 mayor que la que ves, y el primer carácter es esta lista de materiales (BOM).
Esto puede causar algunos problemas, como al leer un archivo ini, si quieres saber si la primera línea empieza por "[", no puedes juzgar correctamente.
Afortunadamente, cuando Java lee archivos Unicode, cambia uniformemente la lista de materiales a "\uFEFF", así que puedes resolverlo manualmente (tras el juicio, usa substring() o replace() para eliminar esta lista de materiales (BOM):
Sin embargo,Este enfoque no es perfectoSi el archivo jar generado se ejecuta bajo Windows, sigue habiendo un problema. La solución definitiva es usar el BOMInputStream proporcionado por apache commons io:
¿Qué es la Lista de Bebida?
BOM = Marca de orden de bytes La lista de materiales es el método recomendado para marcar el orden de los bytes en la especificación Unicode. Por ejemplo, para UTF-16, si el receptor recibe una lista de materiales de FEFF, indica que el flujo de bytes es Big-Endian; Si se recibe FFFE, indica que el flujo de bytes es Little-Endian. UTF-8 no requiere una lista de materiales para indicar el orden de bytes, pero puede usarse para indicar "Estoy codificado en UTF-8". La codificación UTF-8 de la lista de materiales es EF BB BF (como se ve al abrir texto con UltraEdit y cambiar a hexadecimal). Así que si el receptor recibe un flujo de bytes que empieza con EF BB BF, saben que es codificación UTF-8.
|