Jak ustawić kodowanie awaryjne na UTF-8 w Firefoksie?

12

Napisałem norweski dokument przeceny:

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

Przekształciłem go na HTML za pomocą markdownpolecenia:

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

Jednak Firefox nalega na użycie kodowania „windows-1252”, łamiąc znaki inne niż ASCII. Próbowałem zmienić kodowanie tekstu zastępczego z „Domyślne dla bieżących ustawień regionalnych” (które tutaj w Wielkiej Brytanii powinno być ISO-8859-1 lub UTF-8) na „Środkowoeuropejski, ISO”, „Środkowoeuropejski, Microsoft ”i„ Inne (w tym zachodnioeuropejskie) ”. Żadne z nich nie może wyświetlać æ, ø i å. Brak opcji Unicode. Próbowałem zostały również zmianę intl.fallbackCharsetList.ISO-8859-1w about: config na różne wartości podoba utf8, utf-8, iso-8859-1, bez powodzenia.

Korzystanie z tego markdownpakietu:

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

i ta lokalizacja:

$ 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=

I próbował zapytać o rozwiązanie na markdownpoziomie poleceń, ale został odrzucony.

l0b0
źródło
Co z ustawieniem Widok> Kodowanie tekstu> Unicode z menu Firefox?
Paul Nordin,
@PaulNordin To dobry sposób na zrobienie tego dla jednej strony (zapomniałem, że menu istniało, ponieważ domyślnie je usunęło!), Ale nie sądzę, że to ustawia domyślne.
l0b0
1
O tak, to tylko tymczasowe. Myślę, że problem może być gdzie indziej. Firefox określa typ pliku za pomocą nagłówków lub meta. Na przykład utworzyłem plik UTF-8 test.html zawierający åæâéèi otworzyłem go w Firefoksie. Wyjście było śmieci: åæâéè. Jeśli jednak dodam <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />do góry, wyświetla się poprawnie. Nie jestem pewien, jak to zrobić dla pliku .md.
Paul Nordin,
Chcę to również zrobić, aby móc wyświetlać wiadomości e-mail w formacie html od mutt przez laucing firefox, jednak plik html, który tworzy mutt, to utf-8 bez metatagów.
pepper_chico

Odpowiedzi:

4

Aktualizacja: zostało to naprawione od Firefox 66

Pliki HTML (i zwykły tekst) zakodowane w UTF-8 ładowane z pliku: adresy URL są teraz obsługiwane bez <meta charset="utf-8">BOM UTF-8 lub

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


Informacje historyczne z 2016 r

Powód tego zachowania wydaje się być opisany w błędach Mozilli 815551 ( domyślnie Autodetect UTF-8) i 1071816 (Obsługa ładowania plików tekstowych / zwykłych BOMless UTF-8 z pliku: URL)

O ile rozumiem, w zasadzie sprowadza się to do: „ zawsze należy określać kodowanie, ponieważ wykrywanie jest zbyt niewiarygodne ”.

  • W przypadku treści nielokalnych należy skorzystać z protokołu. W przypadku HTTP byłoby to poprawne charsetw Content-Typenagłówku
  • W przypadku treści HTML możesz dodatkowo użyć Doctype, tj <meta charset="utf-8" />
  • I cokolwiek innego, jedynym standardowym sposobem jest określenie BOM ...

Wydaje się, że deweloperzy Mozilli są otwarci na łatkę, która dodaje ustawienie preferencji, więc pewnego dnia może być możliwe otwarcie lokalnych dokumentów UTF-8 bez BOM w Firefoksie.

mleu
źródło
4

Ustawienie kodowania awaryjnego na UTF-8 w Firefoksie zostało celowo zablokowane - patrz bugzilla.mozilla.org/show_bug.cgi?id=967981#c4.

Dwa sposoby obejścia tego, na które patrzyłem, to:

1] Zastosuj kilka prostych poprawek do źródła i sam zbuduj Firefoksa, aby dodać opcję Unicode [UTF-8] do Preferencji | Treść | Czcionki i kolory | Zaawansowane | Menu rozwijane „Fallback Text Encoding”.

2] Uruchom lokalny serwer httpd [Apache] i skonfiguruj Serwer wirtualny oparty utfxna nazwie dla plików zakodowanych w katalogu utf-8 w katalogu /my/utf-8/files. Następnie można wygenerować nagłówek http zestawu znaków utf-8, który Firefox rozpozna i wyświetli plik jako zakodowany w UTF-8. Oczywiście, rzeczywiste kodowanie plików musi być UTF-8!

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

<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>

(Ponownie) uruchom serwer - apachectl restartlub apachectl graceful.

b) / etc / hosts - dodaj nazwę domeny, aby uzyskać dostęp do plików zakodowanych w utf-8:

127.0.0.1   utfx

Informacje o typie treści wysyłane przez serwer można sprawdzić za pomocą wget -S <URL>:

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

dla trzech typów plików (testæø, test.txt, test.html).
Dane wyjściowe powinny być:

Content-Type: tekst / zwykły; charset = utf-8
Content-Type: text / plain; charset = utf-8
Content-Type: text / html; charset = utf-8

c) about: config - dodaj Nowy | Boolean:

browser.fixup.domainwhitelist.utfx  "true"

następnie wystarczy wpisać utfxw pasku adresu Firefox, aby uzyskać listę plików ..

Ray-V
źródło
+1 za link Bugzilla. Rozwiązania są niestety bardzo przesadne w stosunku do problemu.
l0b0
3

Jak skomentowałem w twoim pytaniu, starałem się uzyskać to samo w celu poprawnego wyświetlania częściowego HTML (kodowanie jest znane, ale nie ma metatagu do kodowania) z Mutt w Firefox za pośrednictwem Mailcap.

W końcu wymyśliłem polecenie, które działa i które może ci również pomóc:

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

Odkryłem, że kiedy plik zakodowany w UTF-8 zawiera BOM, Firefox zakłada, że ​​jest to UTF-8. Więc użyłem uconvpolecenia, aby dodać podpis BOM. Załóżmy, że %{charset}jest to wejściowy zestaw znaków i %snazwa pliku. spongeNarzędzie (z moreutilspakietu) ułatwia zmianę inplace plików i sleepjest po prostu tak, że Mutt nie usunąć plik przed Firefox kończy załadowaniem.

Nie znalazłem żadnej innej opcji ustawiania kodowania awaryjnego w przeglądarce Firefox.

pepper_chico
źródło
2

Jeśli ustawienie zastępcze tylko dla plików offline, na UTF-8, jest dla Ciebie wystarczające, możesz przejść do about:configi ustawić wartość intl.charset.fallback.utf8_for_filena true.

( źródło )

aplazja
źródło
0

Prostym obejściem jest utworzenie pełnego pliku HTML z deklaracją kodowania :

pandoc --metadata=pagetitle=Brukerveiledning --output=./brukerveiledning.html --standalone --to=html ./brukerveiledning.md

Skrócony (mniej wyraźny i wyświetla ostrzeżenia):

pandoc --standalone ./brukerveiledning.md > ./brukerveiledning.html
l0b0
źródło