วิธีตั้งค่าการเข้ารหัสทางเลือกเป็น UTF-8 ใน Firefox


12

ฉันเขียนเอกสาร markdown ของนอร์เวย์:

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

ฉันได้แปลงเป็น HTML โดยใช้markdownคำสั่ง:

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

อย่างไรก็ตามFirefox ยืนยันที่จะใช้การเข้ารหัส "windows-1252" โดยทำลายอักขระที่ไม่ใช่ ASCII ฉันได้ลองตั้งค่าการเปลี่ยนการเข้ารหัสข้อความทางเลือกจาก "ค่าเริ่มต้นสำหรับตำแหน่งที่ตั้งปัจจุบัน" (ซึ่งในสหราชอาณาจักรควรเป็น ISO-8859-1 หรือ UTF-8) เป็น "Central European, ISO", "Central European, Microsoft "และ" อื่น ๆ (รวมถึงยุโรปตะวันตก) " สิ่งเหล่านี้ไม่สามารถแสดงæ, øและå ไม่มีตัวเลือก Unicode ฉันยังพยายามเปลี่ยนintl.fallbackCharsetList.ISO-8859-1ในเกี่ยวกับ 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ระดับคำสั่ง แต่นั่นก็ถูกปฏิเสธ


แล้วการตั้งค่ามุมมอง> การเข้ารหัสข้อความ> Unicode จากเมนู Firefox
พอล Nordin

@PaulNordin นั่นเป็นวิธีที่ดีในการทำหนึ่งหน้า (ฉันลืมว่ามีเมนูอยู่ตั้งแต่ลบโดยค่าเริ่มต้น!) แต่ฉันไม่คิดว่าจะตั้งค่าเริ่มต้น
l0b0

1
ใช่แล้วมันเป็นเพียงชั่วคราว ฉันคิดว่าปัญหาอาจอยู่ที่อื่น Firefox อาศัยส่วนหัวหรือเมตาเพื่อกำหนดประเภทของไฟล์ ตัวอย่างเช่นฉันสร้างไฟล์ UTF-8 test.html ที่มีåæâéèและเปิดใน firefox åæâéèเอาท์พุทเป็นขยะ: อย่างไรก็ตามถ้าฉันเพิ่ม<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />ไปที่ด้านบนก็จะส่งออกอย่างถูกต้อง ไม่แน่ใจว่าคุณจะทำเช่นนี้อย่างไรกับไฟล์. md
พอล Nordin

ฉันต้องการทำเช่นนี้เพื่อให้สามารถดูอีเมล html จาก mutt โดย lauching firefox ได้ แต่ไฟล์ html mutt ที่สร้างคือ utf-8 โดยไม่มีเมตาแท็ก
pepper_chico

คำตอบ:


4

อัปเดต: สิ่งนี้ได้รับการแก้ไขตั้งแต่ Firefox 66

โหลดไฟล์ HTML (และข้อความล้วน) UTF-8 ที่เข้ารหัสจากไฟล์: ตอนนี้ URL ได้รับการสนับสนุนโดยไม่มี<meta charset="utf-8">หรือ UTF-8 BOM

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


ข้อมูลย้อนหลังตั้งแต่ปี 2559

เหตุผลที่อยู่เบื้องหลังพฤติกรรมนี้ดูเหมือนว่าจะอธิบายไว้ในข้อผิดพลาด Mozilla 815551 (Autodetect UTF-8 โดยค่าเริ่มต้น) และ 1071816 (สนับสนุนการโหลดไฟล์ข้อความธรรมดา / BOMless UTF-8 จากไฟล์: URL)

เท่าที่ฉันเข้าใจโดยทั่วไปแล้วมันจะเดือดร้อนถึง " เราควรระบุการเข้ารหัสเสมอเพราะการตรวจจับนั้นไม่น่าเชื่อถือเกินไป "

  • สำหรับเนื้อหาที่ไม่ใช่ในท้องถิ่นคุณควรใช้โปรโตคอล ด้วย HTTP สิ่งนี้จะให้ข้อมูลที่ถูกต้องcharsetในContent-Typeส่วนหัว
  • สำหรับเนื้อหา HTML คุณสามารถใช้ Doctype เพิ่มเติมได้เช่น <meta charset="utf-8" />
  • และสำหรับสิ่งอื่นทางเหลือทางเดียวคือการระบุ BOM ...

Mozilla devs ดูเหมือนจะเปิดให้ใช้งานสำหรับแพตช์ที่เพิ่มการตั้งค่ากำหนดดังนั้นวันหนึ่งอาจเป็นไปได้ที่จะเปิดเอกสาร UTF-8 BOM-less แบบโลคัลใน Firefox


4

การตั้งค่าการเข้ารหัสทางเลือกเป็น UTF-8 ใน Firefox ถูกบล็อกโดยเจตนา - ดู bugzilla.mozilla.org/show_bug.cgi?id=967981#c4

สองวิธีนี้ฉันได้ดูที่:

1] ใช้แพตช์เล็ก ๆ น้อย ๆกับแหล่งที่มาและสร้าง Firefoxด้วยตัวคุณเองเพื่อเพิ่มตัวเลือก Unicode [UTF-8] ในการตั้งค่า | เนื้อหา | แบบอักษรและสี | ขั้นสูง | เมนูแบบเลื่อนลง "การเข้ารหัสข้อความทางเลือก"

2] Run ท้องถิ่น [Apache] httpd เซิร์ฟเวอร์และตั้งชื่อตามเซิร์ฟเวอร์เสมือนutfxสำหรับไฟล์ที่เข้ารหัส UTF-8 /my/utf-8/filesในไดเรกทอรี ส่วนหัวของ HTTP utf-8 charset สามารถสร้างขึ้นได้ซึ่ง 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
Content-Type: text / plain; charset = utf-8
Content-Type: text / html; charset = UTF-8

c) about: config - เพิ่มใหม่ | Boolean:

browser.fixup.domainwhitelist.utfx  "true"

จากนั้นเพียงป้อนutfxในแถบที่อยู่ Firefox เพื่อรับรายการไฟล์ ..


+1 สำหรับลิงก์ Bugzilla การแก้ปัญหาเป็นเรื่องที่น่าเสียดายอย่างมากสำหรับปัญหานี้
l0b0

3

เมื่อฉันได้แสดงความคิดเห็นในคำถามของคุณฉันพยายามที่จะได้รับเหมือนกันโดยมีวัตถุประสงค์ในการแสดง html บางส่วนอย่างถูกต้อง (เป็นที่รู้จักการเข้ารหัส แต่ไม่มีเมตาแท็กสำหรับการเข้ารหัส) จาก Mutt ใน Firefox ผ่าน Mailcap

ในที่สุดฉันก็เข้าใจคำสั่งที่ใช้ได้ผลซึ่งอาจช่วยคุณได้เช่นกัน:

  • 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แพคเกจ) จะช่วยให้การเปลี่ยน inplace ไฟล์และsleepเป็นเพียงเพื่อให้คนโง่จะไม่ลบไฟล์ก่อนที่จะเสร็จสิ้น 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.