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

¿Fue útil?

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);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top