[fpc-devel] RawByteString Insert etc.
Michael Schnell
mschnell at lumino.de
Fri Dec 5 14:44:29 CET 2014
On 12/05/2014 10:51 AM, Hans-Peter Diettrich wrote:
> IMO the Insert procedure should change the encoding of the
> string-to-insert into the CP of the target string. Else the target
> string can become unusable, containing an mix of characters from
> different codepages. While a RawByteString can have any encoding, it
> cannot have two encodings at the same time.
Is there a "decent" (regarding multi-element codes such as ubiquitous in
utf-8) way at all to do "Insert" with arguments specifying *element*
position ? (As discussed already multiple times, there is no use in
re-defining Insert and other such functions in a way that they use other
enumeration than element-position.)
The common agreement is that the user is discouraged to do any
assumptions about element position specifications (other than "1" =
start of the string and High(Integer) = as high as possible). Any such
value needs to be taken from a calling "Pos()" or "Length()".
>
> BTW, the documentation should be updated to RawByteString arguments.
Which kind of RawByteString ? AFAIK from your mails in the last few
days, with Delphi RawByteString is kind of "dynamic", while with fpc,
RawByteString is statically defined to be something similar to a byte
array.
(BTW can in Delphi RawByteString take a 2 byte encoding such as utf-2,
which is the default "String" in Delphi and if used that way so is
pos(MyRawByteString) counting in Bytes or in Words ?)
OTOH, I understand that "insert", "Pos", "Copy", "Length", "Delete",
"Concat" etc are built-in functions of with the arguments are
"virtually" handled as if they had the non existing DynamicString Type
and - if two arguments with different encoding brand are given - do
*appropriate* auto-conversion. Otherwise no conversion of the input data
to a fixed (i.e. the default "String") type is forced (which would be
done if using a "normal" function with "String" as argument type).
Hence for RawByteString the behavior is undefined. As we already
learned, the behavior of RawByteString usually is undefined, anyway,
-Michael
More information about the fpc-devel
mailing list