Comment définir le codage de secours sur UTF-8 dans Firefox?

12

J'ai écrit un document de démarque norvégienne:

$ file brukerveiledning.md
brukerveiledning.md: UTF-8 Unicode text

Je l'ai converti en HTML à l'aide de la markdowncommande:

$ markdown > brukerveiledning.html <  brukerveiledning.md 
$ file brukerveiledning.html 
brukerveiledning.html: UTF-8 Unicode text

Cependant, Firefox insiste sur l'utilisation de l'encodage "windows-1252", brisant les caractères non ASCII. J'ai essayé de définir le changement du codage du texte de secours de "Default for Current Locale" (qui ici au Royaume-Uni devrait être ISO-8859-1 ou UTF-8) en "Central European, ISO", "Central European, Microsoft "et" Autre (incl. Europe occidentale) ". Aucun de ceux-ci ne peut afficher æ, ø et å. Il n'y a pas d'options Unicode. J'ai aussi essayé de changer intl.fallbackCharsetList.ISO-8859-1dans about: config à diverses valeurs telles que utf8, utf-8, iso-8859-1, sans chance.

Utilisation de ce markdownpackage:

$ pacman --query --owns "$(which markdown)"
/usr/bin/markdown is owned by markdown 1.0.1-6

et cette locale:

$ locale 
LANG=en_GB.utf8
LC_CTYPE="en_GB.utf8"
LC_NUMERIC="en_GB.utf8"
LC_TIME="en_GB.utf8"
LC_COLLATE="en_GB.utf8"
LC_MONETARY="en_GB.utf8"
LC_MESSAGES="en_GB.utf8"
LC_PAPER="en_GB.utf8"
LC_NAME="en_GB.utf8"
LC_ADDRESS="en_GB.utf8"
LC_TELEPHONE="en_GB.utf8"
LC_MEASUREMENT="en_GB.utf8"
LC_IDENTIFICATION="en_GB.utf8"
LC_ALL=

J'ai essayé de demander une solution au markdownniveau de la commande, mais cela a été rejeté.

l0b0
la source
Qu'en est-il de la configuration Affichage> Encodage de texte> Unicode dans le menu Firefox?
Paul Nordin
@PaulNordin C'est une bonne façon de le faire pour une page (j'avais oublié que le menu existait même depuis qu'ils l'ont supprimé par défaut!), Mais je ne pense pas que cela définit la valeur par défaut.
l0b0
1
Oh oui, ce n'est que temporaire. Je pense que le problème pourrait être ailleurs. Firefox s'appuie sur des en-têtes ou des méta pour déterminer le type de fichier. Par exemple, j'ai créé un fichier test.html UTF-8 contenant åæâéèet ouvert dans Firefox. La sortie était garbage: åæâéè. Cependant, si j'ajoute <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />en haut, il sort correctement. Vous ne savez pas comment procéder pour un fichier .md.
Paul Nordin
Je veux également le faire pour pouvoir afficher les e-mails html de mutt en lançant firefox, toujours, le fichier html produit par mutt est utf-8 sans balises META.
pepper_chico

Réponses:

4

Mise à jour: cela a été corrigé depuis Firefox 66

Fichiers HTML (et texte brut) encodés en UTF-8 chargés à partir du fichier: les URL sont désormais prises en charge sans <meta charset="utf-8">ou la nomenclature UTF-8

https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Releases/66#HTML


Informations historiques de 2016

Le raisonnement derrière ce comportement semble être décrit dans les bogues Mozilla 815551 ( Détection automatique UTF-8 par défaut) et 1071816 (Prise en charge du chargement de fichiers texte / simples BOMless UTF-8 à partir d'un fichier: URL)

Pour autant que je comprends, cela se résume à " il faut toujours spécifier l'encodage car la détection est trop peu fiable ".

  • Pour le contenu non local, vous devez tirer parti du protocole. Avec HTTP, cela fournirait le bon charsetdans l'en- Content-Typetête
  • Pour le contenu HTML, vous pouvez également utiliser le Doctype, c'est-à-dire <meta charset="utf-8" />
  • Et pour tout le reste, la seule façon standard reste de spécifier une nomenclature ...

Les développeurs Mozilla semblent être ouverts pour un correctif qui ajoute un paramètre de préférence, donc un jour il pourrait être possible d'ouvrir des documents UTF-8 locaux sans nomenclature dans Firefox.

mleu
la source
4

La définition du codage de secours sur UTF-8 dans Firefox a été délibérément bloquée - voir bugzilla.mozilla.org/show_bug.cgi?id=967981#c4.

Voici deux façons de contourner ce problème:

1] Appliquez quelques correctifs triviaux à la source et créez vous-même Firefox pour ajouter une option Unicode [UTF-8] dans le menu déroulant Préférences | Contenu | Polices et couleurs | Avancé | "Encodage de texte de secours".

2] Exécutez un serveur httpd [Apache] local et configurez un serveur virtuel basé utfxsur le nom pour les fichiers encodés utf-8 dans le répertoire /my/utf-8/files. Un en-tête http de jeu de caractères utf-8 peut alors être généré, que Firefox reconnaîtra et affichera le fichier au format UTF-8. Bien sûr, l'encodage du fichier doit être en UTF-8!

a) /etc/httpd/httpd.conf - ajoutez:

<VirtualHost *:80>
    # This first-listed virtual host is also the default for *:80
    ServerName localhost
    DocumentRoot "/srv/httpd/htdocs"
</VirtualHost>
<VirtualHost *:80>
    ServerName utfx
    DocumentRoot "/my/utf-8/files"
      <Directory "/my/utf-8/files">
          Options Indexes
          Require all granted
      </Directory>
## show UTF-8 characters in file names:
    IndexOptions Charset=UTF-8
## for files with extension html or txt:
    AddCharset UTF-8 txt html
## for extensionless files:
      <Files *>
          ForceType 'text/plain; charset=UTF-8'
      </Files>
      <Files *\.*>
          ForceType None
      </Files>
</VirtualHost>

(Re) démarrez le serveur - apachectl restartou apachectl graceful.

b) / etc / hosts - ajoutez le nom de domaine pour accéder aux fichiers encodés en utf-8:

127.0.0.1   utfx

Les informations de type de contenu envoyées par le serveur peuvent être vérifiées avec wget -S <URL>:

wget -S http://utfx/test{æø,.txt,.html} 2>&1 >/dev/null | grep Content-Type

pour les trois types de fichiers (testæø, test.txt, test.html).
La sortie doit être:

Type de contenu: texte / simple; charset = utf-8
Content-Type: text / plain; charset = utf-8
Content-Type: text / html; charset = utf-8

c) about: config - ajouter New | Boolean:

browser.fixup.domainwhitelist.utfx  "true"

puis entrez simplement utfxdans la barre d'adresse de Firefox pour obtenir la liste des fichiers.

Ray-V
la source
+1 pour le lien Bugzilla. Les solutions sont malheureusement très exagérées pour le problème.
l0b0
3

Comme je l'ai commenté dans votre question, j'avais du mal à obtenir le même dans le but d'afficher correctement le html partiel (l'encodage est connu mais il n'y a pas de balise META pour l'encodage) de Mutt dans Firefox via Mailcap.

Au final, j'ai trouvé une commande qui fonctionne, et qui peut aussi vous aider:

  • uconv --add-signature -f %{charset} -t UTF-8 %s | sponge %s && firefox -new-tab %s & sleep 5

J'ai découvert que lorsque votre fichier encodé UTF-8 contient une nomenclature, Firefox suppose alors que c'est UTF-8. J'ai donc utilisé la uconvcommande pour ajouter la signature de nomenclature. Supposons qu'il %{charset}s'agit du jeu de caractères d'entrée et %sdu nom de fichier. L' spongeoutil (à partir du moreutilspackage) permet de modifier le fichier en place et sleepc'est juste pour que Mutt ne supprime pas le fichier avant que Firefox ait fini de le charger.

Je n'ai trouvé aucune autre option pour définir un encodage de secours dans Firefox.

pepper_chico
la source
2

Si le réglage de la solution de repli pour uniquement les fichiers hors ligne, UTF-8, est suffisant pour vous, alors vous pouvez aller à about:configet définir la valeur de intl.charset.fallback.utf8_for_fileà true.

( source )

aplaice
la source