Como definir a codificação de fallback para UTF-8 no Firefox?

12

Escrevi um documento de remarcação norueguês:

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

Eu o converti para HTML usando o markdowncomando:

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

No entanto, o Firefox insiste em usar a codificação "windows-1252", quebrando os caracteres não ASCII. Tentei definir a alteração da codificação de texto de fallback de "Padrão para o local atual" (que aqui no Reino Unido deve ser ISO-8859-1 ou UTF-8) para "Europa Central, ISO", "Europa Central, Microsoft" "e" Outros (incl. Europa Ocidental) ". Nenhuma delas pode exibir æ, ø e å. Não há opções Unicode. Eu também tentei mudar intl.fallbackCharsetList.ISO-8859-1no about: config para vários valores como utf8, utf-8, iso-8859-1, sem sorte.

Usando este markdownpacote:

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

e este local:

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

Eu tentei perguntar por uma solução no markdownnível de comando, mas que foi rejeitada.

l0b0
fonte
Que tal configurar Ver> Codificação de Texto> Unicode no menu Firefox?
Paul Nordin
@PaulNordin Essa é uma boa maneira de fazer isso para uma página (eu tinha esquecido que o menu existia desde que eles foram removidos por padrão!), Mas acho que isso não é o padrão.
L0b0 07/09/16
1
Oh sim, é apenas temporário. Eu acho que o problema pode estar em outro lugar. O Firefox conta com cabeçalhos ou meta para determinar o tipo de arquivo. Por exemplo, criei um arquivo UTF-8 test.html contendo åæâéèe abri-o no firefox. A saída era lixo: åæâéè. No entanto, se eu adicionar <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />ao topo, ele sai corretamente. Não tenho certeza de como você faria isso para um arquivo .md.
Paul Nordin
Também quero fazer isso para poder visualizar e-mails html do mutt lançando o firefox, ainda assim, o arquivo html que o mutt produz é utf-8 sem metatags.
pepper_chico

Respostas:

4

Atualização: isso foi corrigido desde o Firefox 66

Arquivos HTML (e texto sem formatação) codificados em UTF-8 carregados a partir do arquivo: os URLs agora são suportados sem <meta charset="utf-8">ou a BOM UTF-8

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


Informação histórica de 2016

O raciocínio por trás desse comportamento parece ser descrito nos bugs do Mozilla 815551 ( detecção automática de UTF-8 por padrão) e 1071816 (suporte ao carregamento de arquivos de texto / sem formatação BOMless UTF-8 do arquivo: URLs)

Pelo que entendi, basicamente se resume a " deve-se sempre especificar a codificação, pois a detecção não é confiável ".

  • Para conteúdo não local, você deve aproveitar o protocolo. Com HTTP, isso forneceria o correto charsetno Content-Typecabeçalho
  • Para conteúdo HTML, você também pode usar o Doctype, ou seja, <meta charset="utf-8" />
  • E para qualquer outra coisa, a única maneira padrão restante é especificar uma lista técnica ...

Os desenvolvedores da Mozilla parecem estar abertos para um patch que adiciona uma configuração de preferência; portanto, um dia pode ser possível abrir documentos UTF-8 locais sem BOM no Firefox.

mleu
fonte
4

A definição da codificação de fallback para UTF-8 no Firefox foi deliberadamente bloqueada - consulte bugzilla.mozilla.org/show_bug.cgi?id=967981#c4.

Duas maneiras de contornar isso que eu tenho visto são:

1] Aplique alguns patches triviais à fonte e construa o Firefox você mesmo para adicionar uma opção Unicode [UTF-8] ao menu suspenso Preferências | Conteúdo | Fontes e cores | Avançadas | "Codificação de texto de fallback".

2] Run a um local [Apache] httpd servidor, e configurar um servidor virtual baseada em Nome, utfxpara os utf-8 arquivos codificados no diretório /my/utf-8/files. Um cabeçalho http utf-8 charset pode ser gerado, o que o Firefox reconhecerá e exibirá o arquivo como codificado em UTF-8. Obviamente, a codificação real do arquivo deve ser UTF-8!

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

<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) inicie o servidor - apachectl restartou apachectl graceful.

b) / etc / hosts - adicione o nome de domínio para acessar os arquivos codificados utf-8:

127.0.0.1   utfx

As informações do tipo de conteúdo enviadas pelo servidor podem ser verificadas com wget -S <URL>:

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

para os três tipos de arquivo (testæø, test.txt, test.html).
A saída deve ser:

Tipo de conteúdo: texto / sem formatação; charset = utf-8
Tipo de conteúdo: texto / sem formatação; charset = utf-8
Tipo de conteúdo: text / html; charset = utf-8

c) about: config - adicione novo | Boolean:

browser.fixup.domainwhitelist.utfx  "true"

em seguida, basta entrar utfxna barra de endereços do Firefox para obter a lista de arquivos.

Ray-V
fonte
+1 para o link do Bugzilla. Infelizmente, as soluções são um exagero para o problema.
L0b0
3

Como eu comentei na sua pergunta, eu estava lutando para obter o mesmo com o objetivo de exibir corretamente o html parcial (a codificação é conhecida, mas não há meta tag para codificação) do Mutt no Firefox pelo Mailcap.

No final, descobri um comando que funciona e que também pode ajudá-lo:

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

Descobri que quando o arquivo codificado em UTF-8 contém BOM, o Firefox assume que é UTF-8. Então, eu usei o uconvcomando para adicionar a assinatura da lista técnica. Suponha que esse %{charset}seja o conjunto de caracteres de entrada e %sseja o nome do arquivo. A spongeferramenta (do moreutilspacote) ajuda a alterar o arquivo no local e sleepé apenas para que o Mutt não exclua o arquivo antes que o Firefox termine de carregá-lo.

Não encontrei nenhuma outra opção para definir uma codificação de fallback no Firefox.

pepper_chico
fonte
2

Se definir o fallback apenas para arquivos offline, como UTF-8, for suficiente, você poderá acessar about:confige definir o valor de intl.charset.fallback.utf8_for_filecomo true.

( fonte )

aplaice
fonte