Sto provando a confrontare due stringhe su OSX in modo insensibile al maiuscolo/minuscolo utilizzando AnsiSameText. Funzionava bene, ma su OSX Yosemite questo si comporta in modo strano se la "lingua preferita" di OSX è impostata su olandese ("Preferenze di sistema" -> "Lingua & Regione" -> "Lingue preferite" -> "Nederlands Olandese ").Come confrontare il testo in modo non sensibile al maiuscolo/minuscolo su OSX Yosemite
Nel seguente esempio di codice mi aspetto che stampi solo "uguale". Ma ottengo "lo stesso, diverso, diverso".
program Project2;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils;
begin
if AnsiSameText('abcde', 'ABCDE') then // Same
WriteLn('Same')
else
WriteLn('Different');
if AnsiSameText('abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ') then // different
WriteLn('Same')
else
WriteLn('Different');
if AnsiSameText('i', 'I') then // different
WriteLn('Same')
else
WriteLn('Different');
end.
Qual è il modo corretto di confrontare i testi in modo non sensibile al maiuscolo/minuscolo?
Sto usando Delphi XE7.
Questo comportamento è chiaramente sbagliato. Hai lo stesso risultato su diverse versioni di Delphi? Diverse versioni di OSX? Cosa succede quando esegui il debug di 'AnsiSameText'. Hai il codice sorgente per questo. –
Quando esegue il debug in AnsiSameText 'CFStringCompareWithOptionsAndLocale' restituisce -1. Su OSX 10.9 AnsiSameText funziona come previsto. Ho provato XE5 e XE7, non funziona su entrambe le versioni. Non appena cambio la lingua di OSX 10.10 in inglese, AnsiSameText funziona come previsto. Ma non posso dire ai miei utenti olandesi di cambiare la lingua del loro sistema operativo. –
Il passo successivo è scrivere un programma Obj-C che passa queste stringhe a 'CFStringCompareWithOptionsAndLocale' e tenta di restringere esattamente dove si trova il problema. Sembra un po 'come se la modifica della versione di OSX sia la chiave qui. Ma potrebbe essere che il wrapper Delphi di 'CFStringCompareWithOptionsAndLocale' sia sempre stato rotto e la nuova versione capita proprio per evidenziare il difetto. Puoi anche inviare il tuo programma di esempio al portale di qualità Delphi per dare a Emba la possibilità di esaminare il problema. Btw, +1 per un superbo MCVE. –