Interesting. I thought that SetString is properly overloaded. Maybe it is, maybe not. But anyway I fixed the program by using
WideStr := PWideChar(@WideCharArray[Index]);
Thus ignoring badly-working SetString.
Anyway thank for all responses!

Dňa 24. 12. 2015 o 14:23 Michael Van Canneyt napísal(a):


On Thu, 24 Dec 2015, Lubos Pintes wrote:

Hello,
Here is a minimal program, it doesn't work as I expected either
because there is a bug somewhere in the RTL, or, more probably, I
misunderstood something.
Basically, I am reading an UTF-8 encoded text from stdin, and
collecting it in a WideChar array. I am assigning UTF-8 string to a
WideString, and then collecting chars from it into the mentioned array.
Then I am using a SetString procedure to recreate the WideString from
collected chars.
Here is a simple program which demonstrates this:

program a;
{$mode delphi}

uses SysUtils;

var
  U: UTF8String;
  S, W: WideString;

begin
  U := 'Hello';
  W := U;
  SetString(S, @W[1], Length(W));

This is the problem, not the call to Format.

If you do a writeln('S : ',S); you will see that S is already wrong.
Change it to
    SetString(S, @W[1], Length(W)*SizeOf(WideChar));
and all should go well.

Michael.
_______________________________________________
fpc-pascal maillist  -
[email protected]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal



_______________________________________________
fpc-pascal maillist  -  [email protected]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to