nvi: fallback to ISO8859-1 as last resort
Current logic of using user's locale encoding that is UTF-8 doesn't make much sense if we already failed the looks_utf8() check and skipped encoding set using "fileencoding" as being UTF-8 as well; fallback to ISO8859-1 in that case. Reviewed by: Zhihao Yuan <lichray@gmail.com> Differential Revision: https://reviews.freebsd.org/D24919
This commit is contained in:
parent
7d93dd0f34
commit
38f168e1a3
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=362148
@ -1237,7 +1237,10 @@ file_encinit(SCR *sp)
|
||||
}
|
||||
|
||||
/*
|
||||
* Detect UTF-8 and fallback to the locale/preset encoding.
|
||||
* 1. Check for valid UTF-8.
|
||||
* 2. Check if fallback fileencoding is set and is NOT UTF-8.
|
||||
* 3. Check if user locale's encoding is NOT UTF-8.
|
||||
* 4. Use ISO8859-1 as last resort.
|
||||
*
|
||||
* XXX
|
||||
* A manually set O_FILEENCODING indicates the "fallback
|
||||
@ -1246,9 +1249,13 @@ file_encinit(SCR *sp)
|
||||
*/
|
||||
if (looks_utf8(buf, blen) > 1)
|
||||
o_set(sp, O_FILEENCODING, OS_STRDUP, "utf-8", 0);
|
||||
else if (!O_ISSET(sp, O_FILEENCODING) ||
|
||||
!strcasecmp(O_STR(sp, O_FILEENCODING), "utf-8"))
|
||||
else if (O_ISSET(sp, O_FILEENCODING) &&
|
||||
strcasecmp(O_STR(sp, O_FILEENCODING), "utf-8") != 0)
|
||||
/* Use fileencoding as is */ ;
|
||||
else if (strcasecmp(codeset(), "utf-8") != 0)
|
||||
o_set(sp, O_FILEENCODING, OS_STRDUP, codeset(), 0);
|
||||
else
|
||||
o_set(sp, O_FILEENCODING, OS_STRDUP, "iso8859-1", 0);
|
||||
|
||||
conv_enc(sp, O_FILEENCODING, 0);
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user