The added parameter approach looks very similar to an enhancement suggestion 
that has been around for a while. I'd mention the bug number, but I and bugs 
are not getting along at the moment.

Dar

> On Aug 27, 2019, at 5:54 AM, Mark Waddingham via use-livecode 
> <use-livecode@lists.runrev.com> wrote:
> 
> On 2019-08-22 20:53, Paul Dupuis via use-livecode wrote:
>> I just want it consistent and documented and able to return more than
>> just ASCII data
>> Currently, OSX shell returns UTF8 which may mean that it is returning
>> binary as it is returning 8-bit bytes where Unicode text has been
>> encoded as UTF8
> 
> The encoding returned by the terminal commands on macOS are UTF-8 for two 
> reasons:
> 
>  1) Various environment variables make it so (the 'system encoding')
> 
>  2) The terminal commands you are calling are written to respect the system 
> encoding and emit text encoded in that way - because they are actually 
> emitting text.
> 
> In contrast - 'cat' will just dump the contents of the file you specify byte 
> by byte - and files could contain data in any encoding.
> 
> There is absolutely no way to tell whether a command is 'ls' like and thus 
> emits text, or 'cat' like and thus emits binary.
> 
>> Windows returns CP1252 text, not binary and any Unicode results, which
>> DOS displays as Unicode just fine, can be returned without elaborate
>> work-arounds.
>> That by definition is a bug.
> 
> No - that isn't the definition of a bug - it is a difference of behavior 
> because you are dealing with platform-specific details.
> 
> The /U switch which Dar suggested (and appears to work for DIR and friends at 
> least) seems to be only applicable to 'internal commands' (according to 
> https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/cmd)
>  so it isn't clear what, if anything, it would do to an arbitrary windows 
> terminal command.
> 
>> I would advocate that shell should return binary data. Text being
>> returned should be UTF8 encoded, that way people expecting ASCII do
>> nto need to o anything, they can just work with teh returned text.
>> People expecting Unicode can use textDecode to get the UTF8 converted
>> to LC native 16-bit Unicode, and people extcting binary can use the
>> byte chunk to process what comes back however they want.
> 
> The problem here is that it is up to the command being called what it outputs 
> - nothing else - so this isn't an achievable goal. You have to know what the 
> commands you are calling do, and how they work - and ensure you set the 
> environment up when calling them to return what you want.
> 
> The current situation with shell is irksome though - the internal 
> platform-dependent code returns binary data and does nothing to it but the 
> higher-level wrapper (i.e. the 'shell()' function implementation) will 
> basically leave it as binary data (converted to a native string - native 
> strings and binary strings are essentially interchangeable) and then will 
> perform EOL conversion on it on Windows and in server engines. This means it 
> kinda returns text but not really. Unfortunately this behavior has existed 
> for so long that it is 'just the way things are' so it isn't going to change.
> 
> Moving forward, a second parameter to shell() would probably be the best way 
> to resolve the above anomaly - empty would mean legacy behavior, binary would 
> mean do nothing at all.
> 
> It would be nice to be able to specify 'text' as well...
> 
> On UNIX-based systems it is clear what that should do (textDecode the output 
> based on the 'system' encoding, which is determined from the environment 
> variables of the calling process).
> 
> On Windows it is not clear to me what such a setting could do - /U certainly 
> doesn't sound like it helps arbitrary processes, but it might be there is 
> some way to change the codepage (analogous to the 'system encoding') of the 
> command being called so some attempt can be made to text decode and EOL 
> convert appropriately.
> 
> Warmest Regards,
> 
> Mark.
> 
> -- 
> Mark Waddingham ~ m...@livecode.com ~ http://www.livecode.com/
> LiveCode: Everyone can create apps
> 
> _______________________________________________
> use-livecode mailing list
> use-livecode@lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription 
> preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode
> 


_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

Reply via email to