Bagaimana cara mengatur penyandian fallback ke UTF-8 di Firefox?

12

Saya telah menulis dokumen penurunan harga Norwegia:

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

Saya telah mengonversinya ke HTML menggunakan markdownperintah:

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

Namun, Firefox bersikeras menggunakan pengkodean "windows-1252", memecah karakter non-ASCII. Saya telah mencoba mengatur mengubah penyandian teks fallback dari "Default for Current Locale" (yang di sini di Inggris harus ISO-8859-1 atau UTF-8) menjadi "Eropa Tengah, ISO", "Eropa Tengah, Microsoft ", dan" Lainnya (termasuk Eropa Barat) ". Tak satu pun dari ini dapat menampilkan æ, ø dan å. Tidak ada opsi Unicode. Saya juga mencoba mengubah intl.fallbackCharsetList.ISO-8859-1di about: config untuk berbagai nilai seperti utf8, utf-8, iso-8859-1, tidak berhasil.

Menggunakan markdownpaket ini :

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

dan lokal ini:

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

Saya mencoba untuk meminta solusi di markdowntingkat perintah, tetapi itu ditolak.

l0b0
sumber
Bagaimana dengan pengaturan View> Text Encoding> Unicode dari menu Firefox?
Paul Nordin
@ PaulNordin Itu cara yang baik untuk melakukannya untuk satu halaman (saya lupa bahwa menu bahkan ada sejak mereka menghapusnya secara default!), Tapi saya tidak berpikir yang menetapkan default.
l0b0
1
Oh ya, itu hanya sementara. Saya pikir masalahnya mungkin di tempat lain. Firefox mengandalkan header atau meta untuk menentukan jenis file. Sebagai contoh, saya membuat file UTF-8 test.html berisi åæâéèdan membukanya di firefox. Output sampah: åæâéè. Namun, jika saya tambahkan <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />ke atas, hasilnya benar. Tidak yakin bagaimana Anda akan melakukan ini untuk file .md.
Paul Nordin
Saya juga ingin melakukan ini untuk dapat melihat email html dari mutt dengan lauching firefox, masih, file html mutt menghasilkan adalah utf-8 tanpa meta tag.
pepper_chico

Jawaban:

4

Pembaruan: ini sudah diperbaiki sejak Firefox 66

File-file HTML (dan teks biasa) yang dikodekan UTF-8 dimuat dari file: URL sekarang didukung tanpa <meta charset="utf-8">atau BOM UTF-8

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


Informasi historis mulai tahun 2016

Alasan di balik perilaku ini tampaknya dijelaskan dalam Mozilla bugs 815551 (Autodetect UTF-8 secara default) dan 1071816 (Dukungan memuat BOMless UTF-8 teks / file biasa dari file: URL)

Sejauh yang saya mengerti pada dasarnya bermuara pada " orang harus selalu menentukan pengkodean karena deteksi terlalu tidak dapat diandalkan ".

  • Untuk konten non-lokal, Anda harus memanfaatkan protokol. Dengan HTTP ini akan menyediakan yang benar charsetdi Content-TypeHeader
  • Untuk konten HTML Anda juga dapat menggunakan DOCTYPE, yaitu <meta charset="utf-8" />
  • Dan untuk hal lain, satu-satunya cara standar yang tersisa untuk menentukan BOM ...

Mozilla devs tampaknya terbuka untuk tambalan yang menambahkan pengaturan preferensi, jadi suatu hari dimungkinkan untuk membuka dokumen UTF-8 BOM-kurang lokal di Firefox.

mleu
sumber
4

Menyetel penyandian fallback ke UTF-8 di Firefox telah sengaja diblokir - lihat bugzilla.mozilla.org/show_bug.cgi?id=967981#c4.

Dua cara untuk mengatasi hal ini adalah:

1] Terapkan beberapa tambalan sepele ke sumber dan buat Firefox sendiri untuk menambahkan opsi Unicode [UTF-8] ke Preferensi | Konten | Fon & Warna | Tingkat Lanjut |

2] Jalankan server httpd [Apache] lokal, dan atur Server Virtual berbasis Nama utfx,, untuk file yang dikodekan utf-8 dalam direktori /my/utf-8/files. Header http utf-8 kemudian dapat dibuat, yang akan dikenali dan ditampilkan oleh Firefox sebagai file yang dikodekan UTF-8. Tentu saja, penyandian file yang sebenarnya harus UTF-8!

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

<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) mulai server - apachectl restartatau apachectl graceful.

b) / etc / hosts - tambahkan nama domain untuk mengakses file yang dikodekan utf-8:

127.0.0.1   utfx

Info tipe konten yang dikirim oleh server dapat diperiksa dengan wget -S <URL>:

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

untuk ketiga jenis file (testæø, test.txt, test.html).
Outputnya harus:

Jenis-Konten: teks / polos; charset = utf-8
Content-Type: text / plain; charset = utf-8
Content-Type: text / html; charset = utf-8

c) tentang: config - tambahkan Baru | Boolean:

browser.fixup.domainwhitelist.utfx  "true"

kemudian cukup masukkan utfxdi bilah alamat Firefox untuk mendapatkan daftar file ..

Ray-V
sumber
+1 untuk tautan Bugzilla. Solusinya sayangnya sangat berlebihan untuk masalah ini.
l0b0
3

Seperti yang telah saya komentari dalam pertanyaan Anda, saya berjuang untuk memperoleh hal yang sama dengan tujuan menampilkan html parsial dengan benar (penyandian diketahui tetapi tidak ada meta tag untuk penyandian) dari Mutt di Firefox melalui Mailcap.

Pada akhirnya saya telah menemukan perintah yang berfungsi, dan yang dapat membantu Anda juga:

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

Saya telah menemukan bahwa ketika file yang disandikan UTF-8 Anda mengandung BOM, Firefox kemudian menganggapnya UTF-8. Jadi saya telah menggunakan uconvperintah untuk menambahkan tanda tangan BOM. Asumsikan itu %{charset}adalah input charset dan %snama file. The spongealat (dari moreutilspaket) membantu mengubah inplace file dan sleephanya sehingga Mutt tidak menghapus file sebelum Firefox selesai loading itu.

Saya belum menemukan opsi lain untuk mengatur penyandian fallback di Firefox.

pepper_chico
sumber
2

Jika mengatur fallback hanya untuk file offline, ke UTF-8, cukup untuk Anda, maka Anda dapat pergi ke about:configdan mengatur nilai intl.charset.fallback.utf8_for_fileuntuk true.

( sumber )

aplaice
sumber
0

Solusi sederhana adalah menghasilkan file HTML lengkap dengan deklarasi penyandian :

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

Dipendekkan (kurang eksplisit dan menghasilkan peringatan):

pandoc --standalone ./brukerveiledning.md > ./brukerveiledning.html
l0b0
sumber