我写了一份挪威语 Markdown 文档:
$ 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 更改为各种值,例如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
,但被拒绝了。
答案1
在 Firefox 中将后备编码设置为 UTF-8 已被故意阻止 - 请参阅 bugzilla.mozilla.org/show_bug.cgi?id=967981#c4。
我一直在研究的两种解决方法是:
1]应用一些琐碎的事情补丁到源头和构建火狐浏览器您自己将 Unicode[UTF-8] 选项添加到首选项|内容|字体和颜色|高级|“后备文本编码”下拉菜单中。
utfx
2] 运行本地 [Apache] httpd 服务器,并为目录 中的 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 restart
或apachectl 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 地址栏中输入即可获取文件列表..
答案2
更新:自 Firefox 66 以来已修复此问题
从文件加载 UTF-8 编码的 HTML(和纯文本)文件:现在支持不带
<meta charset="utf-8">
UTF-8 BOM 的URL
https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Releases/66#HTML
2016年历史信息
Mozilla bug 中似乎描述了此行为背后的原因815551(默认情况下自动检测 UTF-8)和 1071816(支持从文件:URL加载BOMless UTF-8文本/纯文本文件)
据我了解,它基本上可以归结为“人们应该始终指定编码,因为检测太不可靠”。
- 对于非本地内容,您应该利用该协议。对于 HTTP,这将在标头
charset
中提供正确的信息Content-Type
- 对于 HTML 内容,您还可以使用 Doctype,即
<meta charset="utf-8" />
- 对于其他任何事情,剩下的唯一标准方法就是指定 BOM...
Mozilla 开发人员似乎是打开补丁添加了一项首选项设置,因此有一天可能可以在 Firefox 中打开本地无 BOM UTF-8 文档。
答案3
正如我在你的问题中评论的那样,我正在努力通过 Mailcap 从 Firefox 中的 Mutt 正确显示部分 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 中设置后备编码。
答案4
一个简单的解决方法是生成带有编码声明的完整 HTML 文件:
pandoc --metadata=pagetitle=Brukerveiledning --output=./brukerveiledning.html --standalone --to=html ./brukerveiledning.md
缩短(不太明确并产生警告):
pandoc --standalone ./brukerveiledning.md > ./brukerveiledning.html