[fpc-devel] Unicode support (again)

Vincent Snijders vsnijders at vodafonevast.nl
Mon Nov 10 17:00:28 CET 2008


Michael Schnell schreef:
> I found that the current FPC does have Unicode support, but there are 
> some problems.
> 

I am going to give it another try, maybe it helps somebody.

> - by design (for speed sake), UTF8String (and WideString when surrogate 
> codes are used) count in subcodes and not in Unicode-Characters, so the 
> behavior is "unexpected" when doing things like s[i], pos(s), copy(), 
> delete(), ... There are not _slow_ functions that do the "expected" 
> versions of s[i], pos(s), copy(), delete(), ... (I've yet to find out 
> how I can print just the first character of an UTF8String :)
> 
> - there are different option on how the compiler expects the coding of 
> the source file. Seemingly if it detects it to be UTF8 coded and a 
> certain (otherwise correct) option is set, even "s := 'hallo äöü'; " 
> does not work correctly as expected if s is a WideString. (Lazarus with 
> default settings suffers from this problem).

Create a new lazarus project, drop a memo, button and edit on a form and add the 
lclproc unit. Create a button on click handler and add the following code:

procedure TForm1.Button1Click(Sender: TObject);
var
   w: widestring;
   i: integer;
begin
   w := UTF8Decode('hallo äöü');
   Edit1.Caption := UTF8Encode(w);
   Memo1.Clear;
   for i := 1 to UTF8Length(Edit1.Caption) do
     Memo1.Lines.Add(UTF8Copy(Edit1.Caption, i,1));
end;

IMHO, this is working fine.

Vincent



More information about the fpc-devel mailing list