icu4j cirílico a latín
-
26-10-2019 - |
Pregunta
Estoy tratando de hacer que las palabras cirílicas estén en latín para poder tenerlas en URL. yo suelo ICU4J Transliterador, pero todavía da personajes extraños como este: Vilʹândimaa. Debería ser más como viljandimaa. Cuando copio esa URL, estas letras se convierten en %... algo inútil.
¿Alguien sabe cómo obtener cirílico a AZ con ICU4J?
ACTUALIZAR
Ya no puedo contestarme, pero encontré esta pregunta que fue muy útil: Conversión de símbolos, letras de acento al alfabeto inglés
Solución
Modificar su identificador para hacer lo que quieras. Puedes quitarte caracteres no deseados usando una expresión regular con el Remove
transformar.
Por ejemplo, considere la cadena "'Eé матеéfir:
"'E\u00E9 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430"
El identificador "Any-Latin; NFD; [^\\p{Alnum}] Remove"
Transliterará al latín (que aún puede incluir acentos), descompondrá caracteres acentuados en la letra y los diacríticos y eliminará cualquier cosa que no sea un alfanumérico. La cadena resultante es "Eematematika".
Puedes leer más sobre los identificadores bajo Transformaciones generales en el sitio web de la UCI.
Ejemplo:
//import com.ibm.icu.text.Transliterator;
String greek
= "'E\u00E9 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430";
String id = "Any-Latin; NFD; [^\\p{Alnum}] Remove";
String latin = Transliterator.getInstance(id)
.transform(greek);
System.out.println(latin);
Probado contra ICU4J 49.1.
Otros consejos
No tengo idea de ICU4J, pero En la tabla Unicode toma el cirílico Solo una pequeña gama. En lugar de transmitir bibliotecas de terceros con trabajos poco claros, definiría una secuencia de transliteración para cada símbolo cirílico e hice la traducción yo mismo.
PD: ¿Qué palabra de idioma proviene "Viljandimaa"? No me parece cirílico ...
Mira esto:https://ru.stackoverflow.com/questions/633355/показать-пра neg
Agregar denepdency:
<dependency>
<groupId>com.ibm.icu</groupId>
<artifactId>icu4j</artifactId>
<version>63.1</version>
</dependency>
Y transliterarse:
var CYRILLIC_TO_LATIN = "Latin-Russian/BGN"
// var CYRILLIC_TO_LATIN = "Russian-Latin/BGN"
Transliterator toLatinTrans = Transliterator.getInstance(CYRILLIC_TO_LATIN);
String result = toLatinTrans.transliterate(st);
System.out.println(result);