Làm cách nào để đặt mã hóa dự phòng thành UTF-8 trong Firefox?


12

Tôi đã viết một tài liệu đánh dấu Na Uy:

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

Tôi đã chuyển đổi nó sang HTML bằng markdownlệnh:

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

Tuy nhiên, Firefox khăng khăng sử dụng mã hóa "windows-1252", phá vỡ các ký tự không phải ASCII. Tôi đã thử đặt thay đổi mã hóa văn bản dự phòng từ "Mặc định cho địa điểm hiện tại" (ở đây tại Vương quốc Anh phải là ISO-8859-1 hoặc UTF-8) thành "Trung Âu, ISO", "Trung Âu, Microsoft "Và" Khác (bao gồm Tây Âu) ". Không ai trong số này có thể hiển thị æ, ø và å. Không có tùy chọn Unicode. Tôi cũng đã cố gắng thay đổi intl.fallbackCharsetList.ISO-8859-1trong about: config để các giá trị khác nhau như utf8, utf-8, iso-8859-1, không có may mắn.

Sử dụng markdowngói này :

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

và miền địa phương này:

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

Tôi đã cố gắng yêu cầu một giải pháp ở markdowncấp chỉ huy, nhưng điều đó đã bị từ chối.


Còn về cài đặt Xem> Mã hóa văn bản> Unicode từ menu Firefox thì sao?
Paul Nordin

@PaulNordin Đó là một cách tốt để làm điều đó cho một trang (Tôi đã quên menu đó thậm chí còn tồn tại kể từ khi họ xóa nó theo mặc định!), Nhưng tôi không nghĩ rằng nó đặt mặc định.
l0b0

1
Vâng, nó chỉ là tạm thời. Tôi nghĩ vấn đề có thể ở nơi khác. Firefox dựa vào các tiêu đề hoặc meta để xác định loại tệp. Ví dụ: tôi đã tạo một tệp UTF-8 test.html có chứa åæâéèvà mở nó trong firefox. Đầu ra là rác : åæâéè. Tuy nhiên, nếu tôi thêm <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />vào đầu, nó xuất ra đúng cách. Không chắc chắn làm thế nào bạn sẽ làm điều này cho một tập tin .md.
Paul Nordin

Tôi cũng muốn làm điều này để có thể xem email html từ mutt bằng cách sử dụng firefox, tuy nhiên, tệp html mutt tạo ra là utf-8 không có thẻ meta.
pepper_chico

Câu trả lời:


4

Cập nhật: điều này đã được sửa kể từ Firefox 66

Các tệp HTML (và văn bản thuần) được mã hóa UTF-8 được tải từ tệp: URL hiện được hỗ trợ mà không có <meta charset="utf-8">hoặc BOM UTF-8

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


Thông tin lịch sử từ năm 2016

Lý do đằng sau hành vi này dường như được mô tả trong lỗi Mozilla 815551 (Tự động phát hiện UTF-8 theo mặc định) và 1071816 (Hỗ trợ tải tệp văn bản / văn bản BOMless UTF-8 từ tệp: URL)

Theo như tôi hiểu thì về cơ bản, nó hiểu rõ " người ta phải luôn chỉ định mã hóa vì phát hiện quá không đáng tin cậy ".

  • Đối với nội dung không phải cục bộ, bạn nên tận dụng giao thức. Với HTTP, điều này sẽ cung cấp chính xác charsettrong Content-TypeTiêu đề
  • Đối với nội dung HTML, bạn có thể sử dụng thêm Doctype, nghĩa là <meta charset="utf-8" />
  • Và đối với bất cứ điều gì khác, cách tiêu chuẩn duy nhất còn lại để chỉ định BOM ...

Các nhà phát triển Mozilla dường như đang mở một bản vá có thêm cài đặt ưu tiên, vì vậy một ngày nào đó có thể mở các tài liệu UTF-8 không BOM cục bộ trong Firefox.


4

Đặt mã hóa dự phòng thành UTF-8 trong Firefox đã bị chặn một cách có chủ ý - xem bugzilla.mozilla.org/show_orms.cgi?id=967981#c4.

Hai cách xung quanh điều này mà tôi đã xem xét là:

1] Áp dụng một số bản vá tầm thường cho nguồn và tự xây dựng Firefox để thêm tùy chọn Unicode [UTF-8] vào Tùy chọn | Nội dung | Phông chữ & Màu sắc | Nâng cao | Trình đơn thả xuống "Mã hóa văn bản dự phòng".

2] Chạy máy chủ httpd [Apache] cục bộ và thiết lập Máy chủ ảo dựa trên tên utfx, cho các tệp được mã hóa utf-8 trong thư mục /my/utf-8/files. Sau đó, một tiêu đề http bộ ký tự utf-8 có thể được tạo, mà Firefox sẽ nhận ra và hiển thị tệp dưới dạng UTF-8 được mã hóa. Tất nhiên, mã hóa tập tin thực tế phải là UTF-8!

a) /etc/httpd/httpd.conf - thêm:

<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) khởi động máy chủ - apachectl restarthoặc apachectl graceful.

b) / etc / hosts - thêm tên miền để truy cập các tệp được mã hóa utf-8:

127.0.0.1   utfx

Thông tin loại nội dung được gửi bởi máy chủ có thể được kiểm tra bằng wget -S <URL>:

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

cho ba loại tệp (testæø, test.txt, test.html).
Đầu ra phải là:

Loại nội dung: văn bản / thuần túy; charset = utf-8
Loại nội dung: văn bản / thuần túy; charset = utf-8
Loại nội dung: text / html; bộ ký tự = utf-8

c) about: config - thêm Mới | Boolean:

browser.fixup.domainwhitelist.utfx  "true"

sau đó chỉ cần nhập utfxvào thanh địa chỉ Firefox để lấy danh sách tệp ..


+1 cho liên kết Bugzilla. Thật không may là các giải pháp rất nhiều quá mức cho vấn đề.
l0b0

3

Như tôi đã nhận xét trong câu hỏi của bạn, tôi đã đấu tranh để có được điều tương tự với mục đích hiển thị chính xác một phần html (mã hóa được biết nhưng không có thẻ meta để mã hóa) từ Mutt trong Firefox thông qua Mailcap.

Cuối cùng, tôi đã tìm ra một lệnh hoạt động và cũng có thể giúp bạn:

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

Tôi đã phát hiện ra rằng khi tệp được mã hóa UTF-8 của bạn chứa BOM, Firefox sẽ thừa nhận đó là UTF-8. Vì vậy, tôi đã sử dụng uconvlệnh để thêm chữ ký BOM. Giả sử đó %{charset}là bộ ký tự đầu vào và %slà tên tệp. Công spongecụ (từ moreutilsgói) giúp thay đổi tệp tại chỗ và sleepchỉ để Mutt không xóa tệp trước khi Firefox hoàn tất tải tệp.

Tôi không tìm thấy bất kỳ tùy chọn nào khác để đặt mã hóa dự phòng trong Firefox.


2

Nếu chỉ đặt dự phòng cho các tệp ngoại tuyến, thành UTF-8, là đủ cho bạn, thì bạn có thể đi đến about:configvà đặt giá trị của intl.charset.fallback.utf8_for_filethành true.

( nguồn )


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.