ICU4J cirillico al latino
-
26-10-2019 - |
Domanda
Sto cercando di ottenere in cirillico parole di essere in latino modo che io possa avere in URL. Io uso ICU4J transliterator, ma dà ancora personaggi strani come questo: Vil'ândimaa . Dovrebbe essere più come Viljandimaa . Quando ho copia che url queste lettere si rivolgono a% .. qualcosa di inutile.
Qualcuno sa come ottenere il cirillico ad a-z con ICU4J?
Aggiorna
Non posso rispondere io già, ma ha trovato questa domanda che è stato molto disponibile: Simboli Conversione, Accent lettere a alfabeto inglese
Soluzione
Modifica la identificatore per fare quello che vuoi. È possibile eliminare i caratteri indesiderati utilizzando un'espressione regolare con il Remove
trasformare.
Ad esempio, si consideri la stringa "'EE ??????????" :
"'E\u00E9 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430"
Il "Any-Latin; NFD; [^\\p{Alnum}] Remove"
identificatore sarà traslitterare al latino (che può ancora comprendere accenti), caratteri accentati decompongono nel lettere e segni diacritici e rimuovere tutto ciò che non è un alfanumerico. La stringa risultante è "Eematematika" .
Si può leggere di più sugli identificatori ai sensi trasforma generali sul sito web ICU.
Esempio:
//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);
Provato contro ICU4J 49,1.
Altri suggerimenti
non hanno idea di ICU4J, ma nella tabella Unicode cirillici prende solo un piccolo intervallo. Invece di inoltro su librerie di terze parti con lavorazioni poco chiare, mi piacerebbe definire una sequenza di traslitterazione per ogni simbolo cirillico e ha fatto la traduzione me stesso.
P.S. Che lingua parola "Viljandimaa" viene da? Non sembra cirillico a me ...
Date un'occhiata a: https://ru.stackoverflow.com/questions/633355 / ????????-??????????-??????-??????????????-??-java
Add denepdency:
<dependency>
<groupId>com.ibm.icu</groupId>
<artifactId>icu4j</artifactId>
<version>63.1</version>
</dependency>
E traslitterare:
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);