java unicode character ascii ligature

java - Separando caracteres de ligadura de Unicode



character ascii (3)

A lo largo de la gran cantidad de caracteres Unicode, hay algunos que en realidad representan más de un carácter, como la ligadura U + FB00 ff para dos caracteres ''f''. ¿Hay alguna manera fácil de convertir caracteres como estos en múltiples caracteres individuales? Preferiblemente, algo disponible en la API de Java estándar, pero puedo referirme a una biblioteca externa si es necesario.


El proceso del que habla se llama Normalización y se especifica en la nota técnica de Formularios de normalización de Unicode .

Hay una clase en la biblioteca de clases de Java SE llamada java.text.Normalizer que implementa este proceso. Sin embargo, debe leer el documento Unicode vinculado anteriormente para averiguar cuál de los "formularios de normalización" debe usar para obtener el resultado que desea. No es sencillo ...


Puedes probar el java.text.Normalizer , pero no estoy seguro de si eso funciona para las ligaduras.


U + FB00 es un carácter de compatibilidad. Normalmente, Unicode no admite puntos de código separados para las ligaduras (argumentando que es una decisión de diseño si se debe usar una ligadura y cuándo no debe influir en cómo se almacenan los datos). Algunos de ellos todavía existen para permitir la compatibilidad de conversión de ida y vuelta con las codificaciones más antiguas que representan ligaduras como entidades separadas.

Afortunadamente, la información que representan los caracteres de la ligadura está presente en el archivo de datos Unicode y los sistemas de manejo de cadenas más capaces tienen esos datos incorporados.

En Java, deberá utilizar la clase Normalizer y el formulario NFKC :

String ff ="/uFB00"; String normalized = Normalizer.normalize(ff, Form.NFKC); System.out.println(ff + " = " + normalized);

Esto imprimirá

ff = ff