Я читаю документ по индексу для строки Delphi, как показано ниже:
http://docwiki.embarcadero.com/RADStudio/Tokyo/en/String_Types_(Delphi)
В одном заявлении говорилось:
Вы можете индексировать строковую переменную так же, как массив. Если S - строковая переменная, отличная от UnicodeString, а i - целочисленное выражение, S [i] представляет i-й байт в S, который может вообще не быть i-м символом или целым символом для многобайтовой символьной строки (MBCS). Точно так же индексирование переменной UnicodeString приводит к тому, что элемент может не быть полным символом. Если строка содержит символы в Basic Multilingual Plane (BMP), все символы имеют размер 2 байта, поэтому при индексации строки появляются символы. Однако, если некоторые символы отсутствуют в BMP, индексированный элемент может быть суррогатной парой, а не целым символом.
Если я правильно понял, S[i]
является индексом i
-го байта строки. Если S
- это UnicodeString
, то S[1]
- это первый байт, S[2]
- второй байт первого символа, S[3]
- первый байт второго символа и т. Д. Если это так, то как мне индексировать символ вместо байт внутри строки? Мне нужно индексировать символы, а не байты.
S
являетсяstring
(=UnicodeString
в Delphi 2009 или новее),S[i]
является таким двухбайтовым символом. Но только символы Unicode в BMP могут быть представлены в виде двухбайтовых единиц, поэтомуS[i]
действительно может быть только одной из двух частей в суррогатной паре. - person Andreas Rejbrand   schedule 24.10.2018S[i]
- это полный символ. - person Andreas Rejbrand   schedule 24.10.2018delphi-xe2
, аdelphi-xe3
, поскольку вы фактически используетеDelphi XE3
. - person Tom Brunberg   schedule 24.10.2018delphi-xe3
, вам когда-нибудь приходило в голову набирать больше символов, пока вы не получите правильный выбор или даже не весь тег? Ваша репутация не имеет ничего общего с тем, какие теги отображаются, и вам не нужно создавать новые, поскольку все теги delphi уже существуют. - person Tom Brunberg   schedule 26.10.2018