“Error de carácter no identificable para codificar UTF-8”

Obtengo un error de comstackción en el siguiente método.

public static boolean isValidPasswd(String passwd) { String reg = "^(?=.*[0-9])(?=.*[az])(?=.*[AZ])(?=.*[~#;:?/@&!\"'%*=¬.,-])(?=[^\\s]+$).{8,24}$"; return Pattern.matches(reg, passwd); } 
 en Utility.java:[76,74] carácter no asignable para 
 enoding UTF-8.  El 74º personaje es '"'

¿Cómo puedo arreglar esto? Gracias.

Tiene un problema de encoding con su archivo de código fuente. Es tal vez codificado en ISO-8859-1, pero el comstackdor estaba configurado para usar UTF-8. Esto dará como resultado errores al usar caracteres, que no tendrán la misma representación de bytes en UTF-8 e ISO-8859-1. Esto sucederá con todos los personajes que no sean parte de ASCII, por ejemplo, ¬ NO FIRME .

Puedes simular esto con el siguiente progtwig. Simplemente utiliza su línea de código fuente y genera una matriz de bytes ISO-8859-1 y decodifica este “error” con la encoding UTF-8. Puedes ver en qué posición se corrompe la línea. Agregué 2 espacios en su código fuente para que se ajuste a la posición 74 para ajustar esto a ¬ NOT SIGN , que es el único carácter que generará diferentes bytes en la encoding ISO-8859-1 y la encoding UTF-8. Supongo que esto coincidirá con la sangría con el archivo fuente real.

  String reg = " String reg = \"^(?=.*[0-9])(?=.*[az])(?=.*[AZ])(?=.*[~#;:?/@&!\"'%*=¬.,-])(?=[^\\s]+$).{8,24}$\";"; String corrupt=new String(reg.getBytes("ISO-8859-1"),"UTF-8"); System.out.println(corrupt+": "+corrupt.charAt(74)); System.out.println(reg+": "+reg.charAt(74)); 

que da como resultado la siguiente salida (en mal estado debido al marcado):

String reg = “^ (? =. [0-9]) (? =. [Az]) (? =. [AZ]) (? =. [~ #;:? / @ &!” ‘% * = ., -]) (? = [^ \ S] + $). {8,24} $ “;:

String reg = “^ (? =. [0-9]) (? =. [Az]) (? =. [AZ]) (? =. [~ #;:? / @ &!” ‘% * = ¬., -]) (? = [^ \ S] + $). {8,24} $ “;: ¬

Consulte “en vivo” en https://ideone.com/ShZnB

Para solucionar esto, guarde los archivos de origen con encoding UTF-8.

Estoy en el proceso de configurar un servidor de comstackción de CI en una caja de Linux para un sistema heredado iniciado en 2000. Hay una sección que genera un PDF que contiene caracteres que no son UTF8. Estamos en los últimos pasos de un lanzamiento, por lo que no puedo reemplazar a los personajes que me causan dolor, pero por razones Dilbertesque, no puedo esperar una semana para resolver este problema después del lanzamiento. Afortunadamente, el comando “javac” en Ant tiene un parámetro de “encoding”.

     

El comstackdor de Java supone que su entrada está codificada en UTF-8, ya sea porque usted lo especificó o porque es la encoding predeterminada de su plataforma.

Sin embargo, los datos en sus archivos .java realidad no están codificados en UTF-8. El problema es probablemente el ¬ personaje. Asegúrese de que su editor (o IDE) de elección realmente guarda su archivo en encoding UTF-8.

En eclipse intente ir a las propiedades del archivo (Alt + Enter) y cambie el recurso -> ‘Codificación del archivo de texto’ -> a Otro a UTF-8. Vuelva a abrir el archivo y verifique que haya un carácter no deseado en algún lugar de la cadena / archivo. Eliminarlo Guarda el archivo.

Cambie el recurso de encoding -> ‘Codificación de archivo de texto’ de nuevo a Predeterminado.

Comstack e implementa el código.

Gracias Michael Konietzka ( https://stackoverflow.com/a/4996583/1019307 ) por su respuesta.

Hice esto en Eclipse / STS:

 Preferences > General > Content Types > Selected "Text" (which contains all types such as CSS, Java Source Files, ...) Added "UTF-8" to the default encoding box down the bottom and hit 'Add' 

Bingo, ¡error!

Para los usuarios de IntelliJ, esto es bastante fácil una vez que descubres cuál era la encoding original. Puede seleccionar la encoding desde la esquina inferior derecha de su ventana, se le preguntará con un cuadro de diálogo que dice:

La encoding que ha elegido (‘[tipo de encoding]’) puede cambiar el contenido de ‘[Su archivo]’. ¿Desea volver a cargar el archivo desde el disco o convertir el texto y guardar en la nueva encoding?

Entonces, si tiene algunos caracteres guardados en alguna encoding extraña, lo primero que debe hacer es seleccionar ‘Recargar’ para cargar todo el archivo en la encoding de los caracteres incorrectos. Para mí esto cambió el? personajes en su propio valor.

IntelliJ puede decir si lo más probable es que no hayas elegido la encoding correcta y te avisará. Revertir e intentar nuevamente.

Una vez que pueda ver desaparecer los caracteres incorrectos, cambie la casilla de selección de encoding en la esquina inferior derecha al formato original (si está buscando en Google este mensaje de error, probablemente sea UTF-8). Esta vez, seleccione el botón ‘Convertir’ en el cuadro de diálogo.

Para mí, necesitaba volver a cargar como ‘windows-1252’, luego convertir de nuevo a ‘UTF-8’. Los caracteres ofensivos eran comillas simples (‘y’) probablemente pegadas desde un documento de Word (o correo electrónico) con la encoding incorrecta, y las acciones anteriores las convertirán a UTF-8.

El comstackdor usa la encoding de caracteres UTF-8 para leer su archivo fuente. Pero el archivo debe haber sido escrito por un editor usando una encoding diferente. Abra su archivo en un editor establecido en la encoding UTF-8, corrija la comilla y guárdela de nuevo.

Alternativamente, puede encontrar el punto Unicode para el personaje y usar un escape Unicode en el código fuente. Por ejemplo, el carácter A puede reemplazarse con el escape Unicode \u0041 .

Por cierto, no es necesario utilizar los anclajes de inicio y fin ^ y $ cuando se utiliza el método matches() . La secuencia completa debe coincidir con la expresión regular cuando se usa el método matches() . Los anclajes solo son útiles con el método find() .

Lo siguiente comstack para mí:

 class E{ String s = "^(?=.*[0-9])(?=.*[az])(?=.*[AZ])(?=.*[~#;:?/@&!\"'%*=¼.,-])(?=[^\\s]+$).{8,24}$"; } 

Ver:

enter image description here

“error: el carácter no identificable para codificar UTF-8” significa que Java ha encontrado un carácter que no está representando en UTF-8. Por lo tanto, abra el archivo en un editor y establezca la encoding de caracteres en UTF-8. Debería poder encontrar un personaje que no esté representado en UTF-8. Quitar este carácter y volver a comstackr.

Observé este problema al usar Eclipse. Necesitaba agregar encoding en mi archivo pom.xml y se resolvió. http://ctrlaltsolve.blogspot.in/2015/11/encoding-properties-in-maven.html