Credo che si dovrebbe usare locale,
Per istanza, "TITLE" .toLowerCase() in una locale turca restituisce "tıtle", dove 'ı' è il carattere LATIN SMALL LETTER DOTLESS I. Per ottenere risultati corretti per le stringhe non sensibili alle impostazioni internazionali, utilizzare toLowerCase (Locale.ENGLISH).
mi riferisco a questi link come soluzione al vostro problema e deve puntare a tenere a mente in voi situazione "turca"
**FROM THE LINKS**
toLowerCase() rispetta l'internazionalizzazione (i18n). Esegue la conversione del caso rispetto alla tua Locale. Quando si chiama toLowerCase(), internamente a LowCase (Locale.getDefault()) viene chiamato . È sensibile alle impostazioni internazionali e non è necessario scrivere una logica intorno a interpretando le impostazioni internazionali in modo indipendente.
import java.util.Locale;
public class ToLocaleTest {
public static void main(String[] args) throws Exception {
Locale.setDefault(new Locale("lt")); //setting Lithuanian as locale
String str = "\u00cc";
System.out.println("Before case conversion is "+str+
" and length is "+str.length());// Ì
String lowerCaseStr = str.toLowerCase();
System.out.println("Lower case is "+lowerCaseStr+
" and length is "+lowerCaseStr.length());// iı`
}
}
Nel programma precedente, guarda la lunghezza della stringa prima e dopo la conversione . Sarà 1 e 3. Sì, la lunghezza della stringa prima di e la conversione dopo il caso è diversa. La tua logica andrà per il lancio quando dipendi dalla lunghezza della stringa in questo scenario. Quando il tuo programma viene eseguito in un ambiente diverso, potrebbe non riuscire. Questa sarà una bella cattura del codice in .
Per renderlo più sicuro, è possibile utilizzare un altro metodo toLowerCase (Locale.English) e sovrascrivere sempre la locale in inglese. Ma allora non sei internazionalizzato.
Quindi il punto cruciale è, toLowerCase() è locale specifico.
reference 1
reference 2
reference 3
errati privi di punti-i, è un minuscolo 'i' senza punti. Il carattere maiuscolo di questo personaggio è il solito "io". C'è un altro personaggio, "I with dot". Il carattere minuscolo di questo personaggio è il solito "i" minuscolo.
Avete notato il problema? Questa conversione asimmetrica causa un serio problema nella programmazione. Affrontiamo questo problema principalmente nelle applicazioni Java a causa dell'implementazione scarsamente (IMHO) delle funzioni toLowerCase e toUpperCase.
In Java, il metodo String.toLowerCase() converte i caratteri in minuscolo in base alle impostazioni internazionali predefinite. Questo causa problemi se la tua applicazione funziona in locale turco e specialmente se stai usando questa funzione per un nome di file o un URL che deve obbedire a un certo set di caratteri.
Ho bloggato circa due esempi seri prima: gli errori di compilazione con le librerie di Script con "i" nei loro nomi e l'errore di XSP Manager se un XPage si trova in un database con "I" nel suo nome.
C'è una lunga storia, come ho detto. Ad esempio in alcune versioni R7, il router non è stato in grado di inviare un messaggio a un destinatario se il suo nome inizia con "I". Agenti segnalanti messaggi non erano in esecuzione in locale turco fino a R8. Chiunque con impostazioni internazionali turche non ha potuto installare Lotus Notes 8.5.1 (è vero!). La lista continua ...
Non c'è quasi nessun beta tester dalla Turchia e i clienti non aprono PMR per questi problemi. Quindi questi problemi non stanno salendo alla prima priorità per i team di sviluppo.
squadra anche Java ha aggiunto un avvertimento speciale alla più recente documentazione:
Questo metodo è locale sensibile, e può produrre risultati imprevisti se utilizzati per le stringhe che sono destinati ad essere interpretati locale in modo indipendente. Esempi sono gli identificatori del linguaggio di programmazione, il protocollo e i tag HTML. Ad esempio, "TITLE" .toLowerCase() in una locale turca restituisce "tıtle", dove 'ı' è il carattere LATIN SMALL LETTER DOTLESS I . Per ottenere risultati corretti per le stringhe non sensibili alle impostazioni internazionali, utilizza toLowerCase (Locale.ENGLISH).
LEGGERE I COLLEGAMENTI I CANT tutti i post DI ESSO "QUESTO E 'Risposta al tuo commento"
Hai provato a non utilizzare le impostazioni locali? – alaster
l'ho provato ... è simile a Locale.ITALIANO ...... ma continuo a dubitare che abbia qualche differenza come esiste per il turco .... quindi dire che usare Locales non farebbe ... . ??? –
L'applicazione sceglierà le impostazioni locali predefinite, quindi se qualcuno eseguirà la tua applicazione in turco con le impostazioni internazionali turche vedrà 'i' senza punto – alaster