Próbuję porównać dwa ciągi na OSX w sposób niewrażliwy na wielkość liter przy użyciu AnsiSameText. To działało dobrze, ale na OS X Yosemite zachowuje się dziwnie, jeśli "preferowany język" OSX jest ustawiony na Holenderski ("Preferencje systemowe" -> "Język & Region" -> "Preferowane języki" -> "Nederlands Dutch ").Jak porównać tekst w sposób nieczuły na OSX Yosemite
W poniższym przykładzie kodu spodziewałbym się, że wydrukuje tylko "to samo". Ale dostaję "to samo, różne, różne".
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.
Jaki jest prawidłowy sposób porównywania tekstów w sposób niewrażliwy na wielkość liter?
Używam Delphi XE7.
To zachowanie jest wyraźnie błędne. Czy otrzymujesz te same wyniki w różnych wersjach Delphi? Różne wersje OSX? Co się dzieje, gdy debugujesz 'AnsiSameText'. Masz kod źródłowy do niego. –
Podczas debugowania w AnsiSameText 'CFStringCompareWithOptionsAndLocale' zwraca -1. Na OSX 10.9 AnsiSameText działa zgodnie z oczekiwaniami. Próbowałem XE5 i XE7, nie powiedzie się w obu wersjach. Jak tylko zmieniłem język OS X 10.10 na angielski, AnsiSameText działa zgodnie z oczekiwaniami. Ale nie mogę powiedzieć moim holenderskim użytkownikom, aby zmieniali język swojego systemu operacyjnego. –
Kolejnym krokiem jest napisanie programu Obj-C, który przekazuje te łańcuchy do 'CFStringCompareWithOptionsAndLocale' i spróbowanie zawęzić dokładnie tam, gdzie leży problem. Brzmi to trochę tak, jakby kluczowa była zmiana wersji OSX. Ale może być tak, że opakowanie Delphi wokół 'CFStringCompareWithOptionsAndLocale' zawsze było zepsute, a nowa wersja akurat podkreśla lukę. Możesz również przesłać swój przykładowy program do portalu jakości Delphi, aby dać Embie szansę spojrzenia na problem. Przy okazji +1 za wspaniałe MCVE. –