git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 1/2] utf8: refactor code to decide fallback encoding

From
Jeff King <peff@peff.net>
Date
Sep 27, 2016, 05:52 UTC
Message-ID
<20160927055202.4ucddki3xkns45om@sigill.intra.peff.net>
In-Reply-To
<20160927012211.9378-2-gitster@pobox.com>
On Mon, Sep 26, 2016 at 06:22:10PM -0700, Junio C Hamano wrote:
Show 18 quoted lines
> @@ -501,17 +516,9 @@ char *reencode_string_len(const char *in, int insz,
>  
>  	conv = iconv_open(out_encoding, in_encoding);
>  	if (conv == (iconv_t) -1) {
> -		/*
> -		 * Some platforms do not have the variously spelled variants of
> -		 * UTF-8, so let's fall back to trying the most official
> -		 * spelling. We do so only as a fallback in case the platform
> -		 * does understand the user's spelling, but not our official
> -		 * one.
> -		 */
> -		if (is_encoding_utf8(in_encoding))
> -			in_encoding = "UTF-8";
> -		if (is_encoding_utf8(out_encoding))
> -			out_encoding = "UTF-8";
> +		in_encoding = fallback_encoding(in_encoding);
> +		out_encoding = fallback_encoding(out_encoding);
> +

This comment is interesting. We're concerned about a platform knowing "utf8" but not "UTF-8". When we fallback, we do it for both the input and output encodings, because we don't know which may have caused the problem. So is it possible that we improve one case but break the other?

With just UTF-8, I don't think so. That could only be the case with something like "utf8 -> utf-8" because they both become "UTF-8". So either it improves the situation or not (because we either understand UTF-8 or not).

But once we introduce other fallbacks, then "utf8 -> latin1" may become "UTF-8 -> iso8859-1". A system that knows only "utf8" and "iso8859-1" _could_ work if we turned the knobs individually, but won't if we turn them both at once. Worse, a system that knows only "UTF-8" and "latin1" works now, but would break with your patches.

I'm not convinced it's worth worrying about, though. The existence of such a system is theoretical at this point. I'm not even sure how common the "know about utf8 but not UTF-8" thing is, or if we were merely being overly cautious.

-Peff
Previous: Junio C HamanoNext: Junio C Hamano
Message 3 of 7 in “Locally alias "latin-1" to "ISO-8859-1"”
  1. 0/2 Locally alias "latin-1" to "ISO-8859-1"Junio C Hamano, Sep 27, 2016
  2. 1/2 utf8: refactor code to decide fallback encodingJunio C Hamano, Sep 27, 2016
  3. Jeff KingSep 27, 2016
  4. Junio C HamanoSep 27, 2016
  5. 2/2 utf8: accept "latin-1" as ISO-8859-1Junio C Hamano, Sep 27, 2016
  6. Jeff KingSep 27, 2016
  7. Junio C HamanoSep 27, 2016

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.