Mattias Gaertner schrieb:

Does concatenating a string and a WideChar create a UnicodeString? Can
this become a problem?

Concatenation requires 2 strings, so everything depends on the concrete code. Regardless of eventual compiler magics, something like this will happen:

var c: WideChar; s, cs: string;
cs := c; //dunno if accepted by the compiler
s := s + cs;

The WideChar can be converted into an Unicode (UTF-8 or UTF-16) string. Afterwards this string may need another conversion, when the other string has a different encoding. In the worst case *both* strings are converted to the default Unicode representation (Delphi: UTF-16, Lazarus: UTF-8?), before they are concatenated. Another conversion may occur when the resulting string is assigned to a variable.

All this may become simpler when CP_ACP is used (at least in Delpi), and the separator is given in that encoding, as a single byte/AnsiChar in case of an SBCS CP_ACP. When Lazarus instead uses UTF-8 (MBCS) for CP_ACP, the character occupies more than one byte, so that this simplification is impossible. This suggests to store the delimiter as an string, instead of a WideChar, whereupon a concatenation of the strings may not require any further conversion.

Finally, when the expression (s+cs) is of type RawByteString (depending on the involved function declarations), the result will be stored in the target variable *without* another conversion. Then the static and dynamic encoding of s may be different afterwards.

DoDi

_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to