Firefox แสดงอักขระขยะแทนหน้าเว็บ


0

ในหน้าเว็บนี้http://taj.chass.ncsu.edu/Hindi.Less.05/dialog_script.html , firefox และ opera ที่ทำงานบน windows และ linux แสดง html ต้นทางสลับกับอักขระขยะ (สำหรับฉันมันปรากฏเป็นสีดำ เพชรที่มีเครื่องหมายคำถาม) ตรงข้ามกับหน้าเว็บที่แสดงผล

จากเบราว์เซอร์ทั้งหมดที่ฉันได้ลองมีเพียง Internet Explorer เท่านั้นที่แสดงหน้าอย่างถูกต้อง ฉันอยากจะใช้เว็บไซต์ที่ Firefox ทำงานบน Linux เพื่อที่จะพยายามให้หน้าแสดงผลอย่างถูกต้องฉันพยายามตั้งค่าการเข้ารหัสอักขระด้วยตนเองทุกค่าที่มี แต่ยังไม่ประสบความสำเร็จ พวกคุณมีข้อเสนอแนะอื่น ๆ อีกไหม?

คำตอบ:


5

ใน Firefox ให้ใช้

ดู -> การเข้ารหัสอักขระ -> การเข้ารหัสเพิ่มเติม -> UTF-16

หวังว่าจะช่วย

ข้อความคอมพิวเตอร์ส่วนใหญ่มีการเข้ารหัสเป็นUnicodeอย่างใดอย่างหนึ่งasciiหรือ8 บิต (UTF-8)

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ UTF-16 โดยเฉพาะการตรวจสอบที่นี่

โดยทั่วไปหากคุณเห็นใน Firefox ให้ใช้ "การคาดเดาที่ชาญฉลาด" และลองเปลี่ยนการเข้ารหัสตัวอักษร โดยปกติจะใช้งานได้เป็นบางครั้งแม้ว่าโดยเฉพาะกับ linux firefox คุณอาจพบปัญหาแบบอักษร


ขอบคุณ! ฉันไม่แน่ใจเลยว่าฉันจะพลาดมันไปได้ยังไง ...
บากุ

แปลกมาก Safari ของฉัน (สำหรับ Mac) ไม่ได้ระบุว่าเป็นตัวเลือก UTF-16 (แต่มันแสดงผลได้ดีแม้ว่าจะเลือกUnicode (UTF-8)อย่างชัดเจนในขณะที่ Firefox ไม่แสดงเมื่อเลือก UTF-8 บางทีใน Safari Unicode (UTF-8)ก็เหมือน "UTF-8" หากไม่พบ BOM มิฉะนั้นใช้ BOM การตัดสินใจเกี่ยวกับการเข้ารหัส Unicode").
Arjan

4

แม้ว่าหนึ่งสามารถเลือกการเข้ารหัสด้วยตนเอง (และอย่าลืมที่จะปิดการใช้งานเมื่อเยี่ยมชมเว็บไซต์อื่น) จริง ๆ แล้วเว็บไซต์ควรมีการระบุไว้อย่างถูกต้อง เซิร์ฟเวอร์หรือเว็บเพจควรระบุบางสิ่งบางอย่างไม่เช่นนั้นเบราว์เซอร์ทั้งหมดจะสามารถคาดเดาได้ดีที่สุด และแน่นอนถ้าการเข้ารหัสที่ถูกระบุไว้แล้วเอกสาร HTML ในความเป็นจริงควรใช้การเข้ารหัสที่ ไม่มากสำหรับเว็บไซต์จากคำถามดังที่แสดงด้านล่าง:

เพื่อดูว่าสิ่งที่เว็บเซิร์ฟเวอร์ที่ระบุหนึ่งต้องไปดูที่ที่เรียกว่าหัว การใช้บริการออนไลน์จากweb-sniffer.netเพื่อเปิดเผยส่วนหัวที่คุณจะได้รับ:

HTTP / 1.1 200 ตกลง

วันที่: จันทร์, 17 สิงหาคม 2009 17:47:03 GMT   
เซิร์ฟเวอร์: Apache  
ปรับเปลี่ยนครั้งล่าสุด: จันทร์, 27 พฤศจิกายน 2549 23:38:49 GMT   
ETag: "758b0606-1a316-4234309151440"  
ยอมรับช่วง: ไบต์   
ความยาวเนื้อหา: 107286  
การเชื่อมต่อ: ปิด   
ประเภทเนื้อหา: ข้อความ / html; charset = utf-8 (BOM UTF-16, litte-endian)

บรรทัดสุดท้ายนั้นค่อนข้างแปลก: เซิร์ฟเวอร์จะอ้างสิทธิ์บางอย่างว่าเป็นทั้ง UTF-8 และ UTF-16 ได้อย่างไร ค่าสำหรับcharsetควรเป็นหนึ่งในค่าที่ลงทะเบียนกับ IANA (เช่นเช่น UTF-8 โดยไม่มีความคิดเห็นใด ๆ ) อย่างไรก็ตามการใช้ดมกลิ่นแพ็คเก็ตWiresharkมากกว่าบริการออนไลน์พบว่าข้อความ(BOM UTF-16, litte-endian)ในความเป็นจริงความคิดเห็นจากบริการออนไลน์ไม่ได้ส่งโดยเว็บเซิร์ฟเวอร์

ดังนั้น: เว็บเซิร์ฟเวอร์อ้างว่ากำลังจะส่งเอกสาร HTML ที่เข้ารหัส UTF-8 ให้เรา

อย่างไรก็ตามเอกสาร HTML ที่ตามมานั้นไม่ถูกต้อง (แก้ไขเพื่อให้สามารถอ่านได้):

ÿþ <! DOCTYPE html PUBLIC "- // W3C // DTD HTML 4.01 Transitional // EN">
<html>
  <head>
    <title> บทที่ 5 </title>
    <meta http-equiv = "ประเภทเนื้อหา" content = "text / html; charset = utf-8">
    <link href = "main.css" rel = "stylesheet" type = "text / css">
  </ head>
...

ข้างต้นบรรทัดระบุชนิดเนื้อหาที่ควรจะเป็นคนแรกที่ปรากฏในสำหรับเบราว์เซอร์มิฉะนั้นจะไม่ทราบวิธีการจัดการตัวอักษรพิเศษใน<head> <title>ที่สำคัญกว่านั้นคือตัวอักขระแปลก ๆ สองตัวแรกÿþคือรหัสฐานสิบหก FF และ FE ซึ่งเหมือนกับบริการออนไลน์ที่ระบุไว้แล้วคือเครื่องหมายคำสั่งไบต์สำหรับ UTF-16, litte-endian

ดังนั้น: เว็บเซิร์ฟเวอร์สัญญาว่าจะส่ง UTF-8 แต่จากนั้นจะส่งเครื่องหมายที่ระบุ UTF-16 LE ถัดไปในเอกสาร HTML มันอ้างว่าใช้ UTF-8 อีกครั้ง

อันที่จริง Wireshark แสดงให้เห็นว่าเอกสาร HTML ที่แท้จริงคือการเข้ารหัส UTF-16 นี่ก็หมายความว่าตัวละครทุกตัวจะถูกส่งโดยใช้อย่างน้อยสองไบต์ (octets) เช่นเดียวกับตัวละครใน 6 จะถูกส่งเป็นไบต์เลขฐานสิบหก<html> 12 3C 00 68 00 74 00 6D 00 6C 00 3E 00แต่นี้เว็บไซต์มากได้เป็นอย่างดีได้รับ ASCII ธรรมดาที่มันไม่ได้ดูเหมือนจะใช้อักขระที่ไม่ใช่ ASCII ใด ๆ เลย แหล่งที่มาของ HTML นั้นเต็มไปด้วยการอ้างอิงอักขระตัวเลข ( NCRs ) เช่น:

&#2351;&#2361; &#2342;&#2367;&#2354;&#2381;&#2354;&#2368;
&#2358;&#2361;&#2352; &#2361;&#2376;&#2404;

เบราว์เซอร์ที่แสดงข้างต้นเป็นयहदिल्लीशहरहै। อย่างไรก็ตามเนื่องจากการใช้ NCR และ UTF-16 อักขระตัวเดียว (( Unicode U + 092F ) ต้องการมากถึง 14 ไบต์26 00 23 00 32 00 33 00 35 00 31 00 3B 00เนื่องจากเขียนโดยใช้ NCR &#2351;ในขณะที่อักขระ ASCII 7 ตัวของ NCR นั้นถูกเข้ารหัสโดยใช้ UTF-16 . เมื่อไม่ได้ใช้ NCR ใน UTF-8 ซิงเกิ้ลयนี้ต้องการ 3 ไบต์ ( E0 A4 AF) และใน UTF-16 สองไบต์ ( 09 2F)

สำหรับแหล่ง HTML นี้โดยใช้ UTF-16 เป็นการสิ้นเปลืองแบนด์วิธรวมและเซิร์ฟเวอร์ไม่ได้ใช้การบีบอัดใด ๆ


คำตอบที่ดีและละเอียดมาก ฉันไม่ทราบรายละเอียดนั้นใน DOCTYPE's
Keck

ประเภทเนื้อหาคือ DOCTYPE (. ดีใจที่รายละเอียดที่มีความนิยมนี้ยังคงเป็นเบต้า SU และทำให้มีผู้ใช้จำนวนมากจาก SO และ SF ผมเดาอย่างน้อยบางส่วนอยากจะรู้ว่าพื้นฐานบางอย่าง.)
Arjan

ขอบคุณสำหรับคำตอบที่ให้ข้อมูลและละเอียดมาก ฉันไม่ได้ตระหนักถึงวิธีการเข้ารหัสที่หลากหลายและดูเหมือนว่าน่าสนใจทีเดียว อย่างน้อยที่สุดมันเป็นสิ่งที่ต้องอ่าน
Babu
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.