[fpc-pascal] Executing external processes and codepages
Michael Van Canneyt
michael at freepascal.org
Wed May 11 13:26:58 CEST 2016
On Wed, 11 May 2016, Jonas Maebe wrote:
>
> Michael Van Canneyt wrote on Wed, 11 May 2016:
>
>> On Wed, 11 May 2016, Jonas Maebe wrote:
>>
>>>
>>> Michael Van Canneyt wrote on Wed, 11 May 2016:
>>>
>>>> On Wed, 11 May 2016, Marco van de Voort wrote:
>>>>
>>>>> I don't like that. The 3.x idea is to get rid of manual conversions and
>>>>> hack-and-convert-it-as-you-go encoding management, not just rebadge the
>>>>> old
>>>>> practices to rawbytestring.
>>>>
>>>> You may not like it, but there is simply no other choice:
>>>>
>>>> Since you don't know what the receiving program does with the receives
>>>> arguments, all attempts to guess it are erroneous by definition.
>>>
>>> It will either interpret them according to the code page specified by the
>>> environment, or not perform any interpretation at all. In both cases,
>>> converting the arguments to the code page of the environment is the right
>>> thing to do.
>>
>> And in the case it makes an assumption of the code page, regardless of
>> environment variables ?
>>
>> (don't say that doesn't happen. It does, I know a programmer that does so)
>
> The caller can work around such bugs by either
> a) using the pchar version of fpexec, or
> b) specifying the code page that this target program uses in the environment
> used to invoke it
a) obviously
b) As said, the target program completely ignores the environment.
I was just trying to point out that while your solution is undoubtedly correct
in the large majority of cases (let's assume 99,99%), it is not a rock-hard guarantee.
IMHO, in this large majority of cases, using RawByteString will be correct as well,
since chances that the calling program uses a different codepage from the
called one are very small. (in casu: UTF8)
I am not saying that attempting to convert to the code page used by the
environment is wrong (except maybe in an small minority as pointed out),
but I do think it is overengineering.
Michael.
More information about the fpc-pascal
mailing list