169 похожих чатов

Всем хорошей пятницы! Может кто-нибудь подсказать: чем отличается результат System.SysUtils.AnsiUpperCase от

System.SysUtils.TStringHelper.ToUpper?
Судя по коду, прихожу к отличию между CharUpperBuffW и LCMapStringW (если речь про Windows), а в версии под Linux, отличия только в локали (?) UTF8CompareLocale.

7 ответов

36 просмотров
Alexander-Somov Автор вопроса

и да, я уже спрашивал ChatGPT ))) он выдал пример: var myAnsiString: AnsiString; myUnicodeString: string; begin myAnsiString := 'hello, 你好'; // Contains both ANSI and Unicode characters // Using AnsiUpperCase ShowMessage(AnsiUpperCase(myAnsiString)); // Output: 'HELLO, ?' // Using TStringHelper.ToUpper myUnicodeString := myAnsiString; // Implicit conversion to UnicodeString ShowMessage(myUnicodeString.ToUpper); // Output: 'HELLO, 你好' end; , который очевидно работает не так, как ))) Но учитывая справку MSDN, а именно примечание: Note that CharUpperBuff always maps lowercase I ("i") to uppercase I, even when the current language is Turkish or Azerbaijani. Решил проверить прицельно для турецкого, взял слово "yazılır" из турецкой wiki, получаю варианты: "YAZıLıR" и "YAZILIR" соответственно...

Alexander-Somov Автор вопроса
Alexander Somov
и да, я уже спрашивал ChatGPT ))) он выдал пример:...

Т.е. как минимум под Windows конвертацию строки текста, а не символов, лучше делать через string.ToUpper или у кого-то есть обратный пример? PS: И да, речь про Delphi 11.2

Alexander Somov
и да, я уже спрашивал ChatGPT ))) он выдал пример:...

а вот алиса Результат функции System.SysUtils.AnsiUpperCase и System.SysUtils.TStringHelper.ToUpper может показаться идентичным, однако они имеют некоторые различия. Функция AnsiUpperCase работает с многобайтовыми кодировками (обычно UTF-8) и преобразует строку в верхний регистр, учитывая локаль операционной системы. Она особенно полезна для обработки данных, которые могут содержать символы различных языков. В свою очередь, функция ToUpper работает с однобайтовыми кодировками и переводит строку в верхний регистр без учета локали. Она может быть более подходящей для обработки строк, содержащих только символы латинского алфавита. Таким образом, выбор между AnsiUpperCase и ToUpper зависит от того, какую кодировку и локаль вы используете, а также от характера обрабатываемых данных.

Handatros
да

в общем картинка с ya.ru для сравнения

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
Карта сайта