如何在Firefox中将备用编码设置为UTF-8?


12

我写了一份挪威降价文件:

$ 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-1在about:config中各种价值观喜欢utf8utf-8iso-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菜单中设置“视图”>“文本编码”>“ Unicode”?
Paul Nordin

@PaulNordin这是在一页上执行此操作的好方法(我忘记了菜单的存在,因为他们默认将其删除了!),但我不认为这会设置默认值。
l0b0

1
哦,是的,这只是暂时的。我认为问题可能出在其他地方。Firefox依靠标题或元来确定文件类型。例如,我创建了一个UTF-8文件test.html,其中包含åæâéè并在firefox中打开了它。输出为垃圾:åæâéè。但是,如果我添加<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />到顶部,则输出正确。不知道如何对.md文件执行此操作。
Paul Nordin

我也想这样做,以便能够通过启动Firefox查看来自mutt的html电子邮件,不过,mutt生成的html文件是没有元标记的utf-8。
pepper_chico

Answers:


4

更新:自Firefox 66起已修复

从文件加载的UTF-8编码的HTML(和纯文本)文件:现在支持不带<meta charset="utf-8">UTF-8 BOM的URL

https://developer.mozilla.org/zh-CN/docs/Mozilla/Firefox/Releases/66#HTML


2016年的历史信息

此行为背后的原因似乎已在Mozilla错误815551(默认情况下自动检测UTF-8)和 1071816(支持从文件:URL加载BOMless UTF-8文本/纯文本文件)中进行了描述。

据我了解,它基本上可以归结为“ 应该总是指定编码,因为检测太不可靠 ”。

  • 对于非本地内容,您应该利用该协议。使用HTTP,这将charsetContent-Type标题中提供正确的
  • 对于HTML内容,您可以另外使用Doctype,即 <meta charset="utf-8" />
  • 对于其他任何事情,剩下的唯一标准方法就是指定物料清单...

Mozilla开发者似乎已经开放了一个添加首选项设置的补丁程序,因此有一天有可能在Firefox中打开本地的无BOM的UTF-8文档。


4

在Firefox中将回退编码设置为UTF-8的行为已被故意阻止-请参见bugzilla.mozilla.org/show_bug.cgi?id=967981#c4。

我一直在研究的两种方法是:

1] 在源代码中应用一些琐碎的补丁程序,然后自己构建Firefox,以便在“首选项” |“内容” |“字体和颜色” |“高级” |“ Fallback文本编码”下拉菜单中添加Unicode [UTF-8]选项。

2]运行本地[Apache] httpd服务器,并utfx为目录中的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>&1 >/dev/null | grep Content-Type

三种文件类型(testæø,test.txt,test.html)。
输出应为:

内容类型:文本/纯文本;charset = utf-8
内容类型:文本/纯文本;charset = utf-8
内容类型:text / html; 字符集= utf-8

c)about:config-添加New | Boolean:

browser.fixup.domainwhitelist.utfx  "true"

然后只需utfx在Firefox地址栏中输入以获取文件列表。


为Bugzilla链接+1。不幸的是,该解决方案对于该问题而言过于矫kill过正。
l0b0

3

正如我在您的问题中评论的那样,我正在努力获取相同的内容,目的是通过Mailcap在Firefox中正确显示部分HTML(已知编码,但没有用于编码的元标记)。

最后,我找出了一个有效的命令,它可能也对您有所帮助:

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

我发现,当您的UTF-8编码文件包含BOM时,Firefox就会假定它是UTF-8。因此,我使用了该uconv命令来添加BOM表签名。假设这%{charset}是输入字符集,并且%s是文件名。该sponge工具(来自moreutils软件包)有助于更改文件的sleep位置,这样做是为了确保Mutt不会在Firefox完成加载之前删除文件。

我还没有找到其他可在Firefox中设置后备编码的选项。


2

如果仅将脱机文件的后备时间设置为UTF-8就足够了,那么您可以转到about:config并将的值设置intl.charset.fallback.utf8_for_filetrue

来源


0

一个简单的解决方法是生成带有编码声明的完整HTML文件

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

缩短(不太明确并产生警告):

pandoc --standalone ./brukerveiledning.md > ./brukerveiledning.html
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.