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:

  1. Char-a-char-reemplazar un solo carácter por otro

  2. lista-a-caracter-reemplazar cualquier carácter en una lista por un carácter definido

  3. 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 \\u seguido 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)
  }
}
  1. Esto elimina la configuración base, lo que significa que cada campo en lookup-table-replacer are removed

  2. El resultado overrides la 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 Resource sintaxis. Solo classpath: y file: son compatibles

tabla-de-búsqueda-de-reemplazos-de-caracteres.reemplazo-por-defecto

Cadena

null

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

empty list

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 character codepoint especificado en el CSV fuente

tabla-de-busqueda-de-reemplazos-de-caracteres.reemplazos.sustitucion

Cadena

Mismo que el replacement especificado en el CSV fuente

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 no replaceWith)

  • Tipo inválido (por ejemplo, especificar una cadena de dos o más caracteres para Character tipos)

  • 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.