From: Florian Weimer <fweimer@redhat.com>
To: Rich Felker <dalias@libc.org>
Cc: musl@lists.openwall.com
Subject: Re: [musl] Choice of wchar_t mapping for non-ASCII bytes in the POSIX locale
Date: Fri, 11 Nov 2022 16:02:23 +0100 [thread overview]
Message-ID: <87v8nlo7pc.fsf@oldenburg.str.redhat.com> (raw)
In-Reply-To: <20221110144447.GI29905@brightrain.aerifal.cx>
* Rich Felker:
> On Thu, Nov 10, 2022 at 09:07:53AM +0100, Florian Weimer wrote:
>> It has come to my attention that musl uses the range 0xDF80…0xDFFF to
>> cover the entire byte range:
>>
>> /* Arbitrary encoding for representing code units instead of characters. */
>> #define CODEUNIT(c) (0xdfff & (signed char)(c))
>> #define IS_CODEUNIT(c) ((unsigned)(c)-0xdf80 < 0x80)
>>
>> There is a very similar surrogate character mapping for undecodable
>> UTF-8 bytes, suggested here:
>>
>> <https://web.archive.org/web/20090830064219/http://mail.nl.linux.org/linux-utf8/2000-07/msg00040.html>
>>
>> It uses 0xDC80…0xDCFF. This has been picked up by various
>> implementations, including Python.
>>
>> Is there a reason why musl picked a different surrogate mapping here?
>> Isn't it similar enough to the UTF-8 hack that it makes sense to pick
>> the same range?
>
> I'll have to look back through archives to see what the motivations
> for the particular range were -- I seem to recall there being some.
> But I think the more important thing here is the *lack* of any
> motivation to align with anything else. The values here are explicitly
> *not* intended for use in any sort of information interchange. They're
> invalid codes that are not Unicode scalar values, and the only reason
> they exist at all is to make application-internal (or even
> implementation-internal, in the case of regex/glob/etc.)
> round-tripping work in the byte-based C locale while avoiding
> assigning character properties to the bytes or inadvertently handling
> them in a way that might facilitate pretending they're just latin1.
For glibc, we are doing this because POSIX requires this for the C
(POSIX) locale. It's now required to use a single-byte character set
with wchar_t mappings for all bytes. Previously, I had hoped to
transition to UTF-8 by default (possibly with a surrogate-escape
encoding like Python's).
I guess as an alternative, we could just use the Latin-1 mapping. Why
hasn't musl done this? Because it would promote the idea that the world
is Latin-1?
> Aside from that, I'm not sure how closely "invalid non-UTF-8 bytes
> that appeared in a stream expected to be UTF-8" and "bytes of what's
> expected to be valid UTF-8 being treated bytewise for processing by
> user request" are related.
I think those two are fairly similar? But “fake single-byte character
set due to POSIX mandate” is different?
Thanks,
Florian
next prev parent reply other threads:[~2022-11-11 15:02 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-10 8:07 Florian Weimer
2022-11-10 14:44 ` Rich Felker
2022-11-11 15:02 ` Florian Weimer [this message]
2022-11-11 15:38 ` Rich Felker
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87v8nlo7pc.fsf@oldenburg.str.redhat.com \
--to=fweimer@redhat.com \
--cc=dalias@libc.org \
--cc=musl@lists.openwall.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/musl/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).