<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type"/>
    <title></title>
  </head>

  <body>
    <p style="margin: 0px;"><span> </span></p>

    <p style="margin: 0px;"> </p>

    <div style="margin: 5px 0px 5px 0px;">
      Graeme Geldenhuys <graemeg.lists@gmail.com> hat am 17. Februar 2011 um 10:35 geschrieben:<br/>
      <br/>
      > Op 2011-02-17 11:28, Michael Schnell het geskryf:<br/>
      > > On 02/17/2011 07:19 AM, Jürgen Hestermann wrote:<br/>
      > >><br/>
      > >> I often search for substrings, delete them from the string, insert<br/>
      > >> other strings at certain places, etc.<br/>
      > >> How can you do all this without knowledge of the internal structure of<br/>
      > >> the string?<br/>
      > > This (magically :-) ) does work with UTF8.<br/>
      ><br/>
      > NO, it doesn't! You can't use FPC's Copy(), Pos() etc reliably with<br/>
      > UTF-8 text, because thouse RTL functions work purely on ANSI text<br/>
      > (1-byte characters - speaking of String type text here) and don't know<br/>
      > about multi-byte characters, combining diacritics etc.
    </div>

    <p style="margin: 0px;"> </p>

    <p style="margin: 0px;">Yes, it does. UTF8Pos simply calls Pos and converts the byte position to code point.</p>

    <p style="margin: 0px;">Pos works, because the first byte of an UTF-8 code point is distinct from the following (%111), so if you search for a valid UTF-8 string Pos will return a valid UTF-8 position. Of course this is a byte position.</p>
    And since copy, insert and delete use byte positions as well you can use them together without trouble.<br/>
    <br/>
    <br/>

    <div style="margin: 5px 0px 5px 0px;">
      > Hence LCL and fpGUI have special functions similar to RTL, that knows how to work with<br/>
      > UTF-8 encoded text. eg: UTF8Pos(), UTF8Length and UTF8Copy() etc functions.
    </div><br/>
    They are useful when you must deal with code points. For example TEdit.SelStart and SelLength are in code points.<br/>
    <br/>
    <br/>
    Mattias<br/>
    <br/>
  </body>
</html>