Reemplazo de Caracteres
El módulo de reemplazo de caracteres es un mecanismo que utiliza reglas de conjunto de caracteres configurables para sanitizar los mensajes que pasan a través de un scheme pack. Soporta tanto reemplazos de caracteres simples uno a uno (por ejemplo, ä > a como se utiliza comúnmente en inglés) como más complejos mappings(por ejemplo, ä > ae o ß > ss como se prefiere en alemán). Estas reglas son customizable para alinearse con las convenciones específicas del idioma o los requisitos del proyecto.
Ejemplo de uso
El módulo utiliza configuración de primavera para definir las reglas utilizadas. La interfaz CharacterReplacer tiene una implementación predeterminada proporcionada por Spring, por lo que para utilizarla, simplemente añada el csm-character-replacement módulo para maven y luego dependency injection implementará la implementación.
Luego simplemente pasamos el mensaje (en formato de cadena) a nuestro characterReplacer, esto devolverá una cadena sanitizada.
System.out.println(characterReplacer.replaceCharacters("ÀÁÂ"))
# prints AAA
Configuración
custom-replacer
Hay tres tipos de configuración disponibles al especificar un custom-replacer:
-
Char-a-char-reemplazar un solo carácter por otro
-
lista-a-caracter-reemplazar cualquier carácter en una lista por un carácter definido
-
regex-a-caracter-reemplazar cualquier carácter en una expresión regular por un carácter definido
| Puede especificar uno o más. Cualquier combinación de estos tres es posible. |
Configuración de muestra
character-replacements {
custom-replacer {
enabled = true
char-to-char-replacements = [
{character = À, replaceWith = A},
{character = ï, replaceWith = i, replaceInDomOnly = true},
]
list-to-char-replacements = [
{list = [È, É, Ê, Ë], replaceWith = E}
]
regex-to-char-replacements = [
{regex = "[\\p{InLatin-1Supplement}]", replaceWith =., replaceInDomOnly = true}
]
}
}
Campos de configuración
| Config | Tipo | Predeterminado | Descripción |
|---|---|---|---|
reemplazos-de-caracteres.custom-replacer.enabled |
Boolean |
falso |
Bandera para habilitar la configuración |
reemplazos-de-caracteres.custom-replacer.char-to-char-replacements.character |
Caracter |
Carácter a ser reemplazado |
|
reemplazos-de-caracteres.custom-replacer.char-to-char-replacements.replaceWith |
Caracter |
Reemplazo de caracteres |
|
reemplazos-de-caracteres.custom-replacer.char-to-char-replacements.replaceInDomOnly |
Boolean |
falso |
Indicador que señala si la sustitución debe realizarse únicamente en los nodos de texto del DOM. |
reemplazos-de-caracteres.custom-replacer.list-to-char-replacements.list |
Lista<Character> |
Lista de caracteres a ser reemplazados |
|
reemplazos-de-caracteres.custom-replacer.list-to-char-replacements.replaceWith |
Caracter |
Reemplazo de caracteres para la lista |
|
reemplazos-de-caracteres.custom-replacer.list-to-char-replacements.replaceInDomOnly |
Boolean |
falso |
Indicador que señala si la sustitución debe ocurrir únicamente en los nodos de texto del DOM. |
reemplazos-de-caracteres.custom-replacer.regex-to-char-replacements.regex |
Cadena |
Expresión regular para caracteres reemplazados |
|
reemplazos-de-caracteres.custom-replacer.regex-to-char-replacements.replaceWith |
Caracter |
Reemplazo de caracteres para expresiones regulares |
|
reemplazos-de-caracteres.custom-replacer.regex-to-char-replacements.replaceInDomOnly |
Boolean |
falso |
Indicador que señala si la sustitución debe realizarse únicamente en los nodos de texto del DOM. |
reemplazador-de-tabla-de-búsqueda
`lookup-table-replacer`utiliza una tabla de búsqueda especificada en un CSV para buscar con qué cadena debe ser reemplazado cada carácter. Manteniendo los reemplazos en el CSV reduce el desorden en los archivos de configuración y es un formato fácil de producir y mantener con otras herramientas.
CSV Formato
El siguiente es un ejemplo de la csv
character codepoint,replacement \\u00c6, A \\u00c7, C \\u00c8, E \\u00c9, some string
-
Ambas columnas son obligatorias.
-
character codepoint— El Punto de código Unicode de un carácter a reemplazar. La cadena debe comenzar con\\useguido del valor hexadecimal del punto de código -
replacement— cualquier cadena que desee utilizar para reemplazar el carácter con
La vinculación de columnas es lo suficientemente flexible como para poder acomodar columnas desconocidas también. Esto puede ser útil para hacer el CSV más legible para los humanos. Aquí tiene un ejemplo con algunas columnas adicionales que son puramente informativas.
character,description,character codepoint,replacement Æ, LATIN CAPITAL LETTER AE,\\u00c6, A Ç, LATIN CAPITAL LETTER C WITH CEDILLA,\\u00c7, C È, LATIN CAPITAL LETTER E WITH GRAVE,\\u00c8, E É, LATIN CAPITAL LETTER E WITH ACUTE,\\u00c9, some string
Sobrescrituras
Sobrescrituras opcionales a la CSV Las sustituciones pueden ser especificadas directamente en la configuración.
Reemplazo de reserva
Se puede proporcionar una cadena de reemplazo alternativa opcional. Esta cadena se utilizará como el reemplazo cuando no se pueda encontrar un carácter coincidente en el CSV fuente ni las anulaciones.
Configuración Base de Muestra
character-replacements {
lookup-table-replacer {
enabled = true
csv-source = "file:/filesystem/path/sample-config.csv"
fallback-replacement = "."
overrides += {character-codepoint = "\\u00c6", replacement = "some override"}
overrides += {character-codepoint = "\\u00c9", replacement = "another override"}
}
}
Ejemplo de Configuración de Downstream (Fusión con la configuración base)
character-replacements {
lookup-table-replacer {
overrides += {character-codepoint = "\\u00ca", replacement = "a third override"}
}
}
Al especificar únicamente el overrides, estamos aprovechando la configuración existente y añadiendo un tercer anulación que se aplicará a la CSV fuente, además de las dos anteriores.
Ejemplo de Configuración de Downstream (Eliminando la configuración base)
character-replacements {
lookup-table-replacer = null (1)
lookup-table-replacer {
enabled = true
csv-source = "classpath:completely_different_source.csv"
overrides += {character-codepoint = "\\u0062", replacement = "ONLY OVERRIDE"} (2)
}
}
-
Esto elimina la configuración base, lo que significa que cada campo en
lookup-table-replacerare removed -
El resultado
overridesla lista tendrá un tamaño de uno, ya que esta es la única anulación que sobrevive la fusión de la configuración
Campos de Configuración
| Config | Tipo | Predeterminado | Descripción |
|---|---|---|---|
character-replacements.lookup-table-replacer.enabled |
Boolean |
falso |
Bandera para habilitar la configuración |
tabla-de-busqueda-de-reemplazos-de-caracteres.csv-fuente |
Cadena |
El camino hacia el CSV fuente. Debe ser especificada en el Primavera |
|
tabla-de-búsqueda-de-reemplazos-de-caracteres.reemplazo-por-defecto |
Cadena |
|
Reemplazo cuando el carácter encontrado por el reemplazador no tiene una entrada en la tabla de búsqueda. Cuando no se especifica, el carácter no se reemplaza. |
tabla-de-busqueda-de-reemplazos-de-caracteres.reemplazador.de-sustituciones |
Lista |
|
Una lista de anulaciones que aplicar sobre el CSV fuente |
tabla-de-busqueda-de-reemplazos-de-caracteres.reemplazador-de-tabla-de-busqueda.sobrescribir.codigo-de-punto-de-caracter |
Cadena |
Mismo que el |
|
tabla-de-busqueda-de-reemplazos-de-caracteres.reemplazos.sustitucion |
Cadena |
Mismo que el |
Configuración obsoleta
| La siguiente configuración está obsoleta y existe únicamente por compatibilidad hacia atrás. No será compatible. en la versión 2026. 3. 0. |
| Si se especifican tanto configuraciones obsoletas como nuevas, se cargará la obsoleta para garantizar la compatibilidad hacia atrás. |
character-replacements {
char-to-char-replacements = [
{character = À, replaceWith = A},
{character = ï, replaceWith = i, replaceInDomOnly = true},
]
list-to-char-replacements = [
{list = [È, É, Ê, Ë], replaceWith = E}
]
regex-to-char-replacements = [
{regex = "[\\p{InLatin-1Supplement}]", replaceWith =., replaceInDomOnly = true}
]
}
| Config | Tipo | Predeterminado | Descripción |
|---|---|---|---|
reemplazos-de-caracteres.reemplazos-de-caracter-a-caracter.caracter |
Char |
Carácter a ser reemplazado |
|
reemplazos-de-caracteres.caracter-a-caracter.reemplazarCon |
Caracter |
Reemplazo de caracteres |
|
character-replacements.char-to-char-replacements.replaceInDomOnly |
Boolean |
falso |
Indicador que señala si la sustitución debe realizarse únicamente en los nodos de texto del DOM. |
character-replacements.list-to-char-replacements.list |
Lista<Character> |
Lista de caracteres que deben ser reemplazados |
|
reemplazos-de-caracteres.lista-de-reemplazos-de-caracteres.reemplazarCon |
Caracter |
Reemplazo de caracteres para la lista |
|
character-replacements.list-to-char-replacements.reemplazarEnDomSolo |
Boolean |
falso |
Indicador que señala si la sustitución debe realizarse únicamente en los nodos de texto del DOM. |
character-replacements.regex-to-char-replacements.regex |
Cadena |
Expresión regular para caracteres reemplazados |
|
reemplazos-de-caracteres.regex-a-reemplazos-de-caracteres.reemplazarCon |
Caracter |
Reemplazo de caracteres para expresiones regulares |
|
character-replacements.regex-to-char-replacements.reemplazarEnDomSolo |
Boolean |
falso |
Indicador que señala si la sustitución debe ocurrir únicamente en los nodos de texto del DOM. |
Manejo de Errores
Errores de Inicio
La configuración se carga al inicio y fallará el inicio de la aplicación si hay errores de configuración, tales como
-
Configurando el habilitado flag sin especificar la configuración
-
Establecer solo uno de los campos requeridos en un reemplazo (por ejemplo, establecer
regex, pero noreplaceWith) -
Tipo inválido (por ejemplo, especificar una cadena de dos o más caracteres para
Charactertipos) -
Formato inválido (por ejemplo, no conforme al formato de punto de código Unicode especificado)
-
No se pudo cargar un archivo desde el classpath o el sistema de archivos.