Arch-Linux

如何在 Firefox 中將備份編碼設置為 UTF-8?

  • July 9, 2019

我寫了一個挪威降價文件:

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

我已使用以下markdown命令將其轉換為 HTML:

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

但是,**Firefox 堅持使用“windows-1252”編碼,**打破了非 ASCII 字元。我嘗試將備份文本編碼從“目前區域設置的預設值”(在英國這裡應該是 ISO-8859-1 或 UTF-8)更改為“中歐,ISO”,“中歐,微軟”和“其他(包括西歐)”。這些都不能顯示æ、ø和å。沒有 Unicode 選項。我還嘗試將intl.fallbackCharsetList.ISO-8859-1about:config 更改為各種值,例如utf8, utf-8, iso-8859-1,但沒有成功。

使用這個markdown包:

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

和這個語言環境:

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

試圖在命令級別尋求解決方案markdown,但被拒絕了。

更新:自 Firefox 66 起已修復此問題

從文件載入的 UTF-8 編碼 HTML(和純文字)文件:現在支持不帶<meta charset="utf-8">UTF-8 BOM 或不帶 UTF-8 BOM 的URL

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


2016年的歷史資訊

這種行為背後的原因似乎在 Mozilla 錯誤815551(預設自動檢測 UTF-8)和 1071816(支持從文件載入 BOMless UTF-8 文本/純文字文件:URL)中描述

據我了解,它基本上歸結為“應該始終指定編碼,因為檢測太不可靠了”。

  • 對於非本地內容,您應該利用該協議。使用 HTTP,這將charsetContent-TypeHeader中提供正確的
  • 對於 HTML 內容,您可以另外使用 Doctype,即<meta charset="utf-8" />
  • 對於其他任何事情,剩下的唯一標準方法是指定 BOM ……

Mozilla 開發人員似乎對添加首選項設置的更新檔持開放態度,因此有一天可能會在 Firefox 中打開本地無 BOM 的 UTF-8 文件。

在 Firefox 中將備份編碼設置為 UTF-8 已被故意阻止 - 請參閱 bugzilla.mozilla.org/show_bug.cgi?id=967981#c4。

我一直在研究的兩種解決方法是:

1]對原始碼應用一些瑣碎的更新檔並自己建構 Firefox以添加 Unicode

$$ UTF-8 $$首選項|內容|字型和顏色|高級|“備份文本編碼”下拉菜單的選項。 2]執行本地

$$ Apache $$utfxhttpd 伺服器,並為目錄中的 utf-8 編碼文件設置一個基於名稱的虛擬伺服器/my/utf-8/files。然後可以生成一個 utf-8 字元集 http 標頭,Firefox 將辨識該文件並將其顯示為 UTF-8 編碼的文件。當然,實際的文件編碼必須是 UTF-8! a) /etc/httpd/httpd.conf - 添加:

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

(重新)啟動伺服器 -apachectl restartapachectl graceful.

b) /etc/hosts - 添加訪問 utf-8 編碼文件的域名:

127.0.0.1   utfx

可以使用 wget -S <URL> 檢查伺服器發送的內容類型資訊:

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

對於三種文件類型(testæø、test.txt、test.html)。

輸出應該是:

內容類型:文本/純文字;charset=utf-8

內容類型:文本/純文字;charset=utf-8

內容類型:文本/html;字元集=utf-8

c) about:config - 添加新|布爾值:

browser.fixup.domainwhitelist.utfx  "true"

然後只需utfx在 Firefox 地址欄中輸入即可獲取文件列表..

引用自:https://unix.stackexchange.com/questions/308469