วิธีการแสดง Unicode UTF-8 เป็น Unicode


12

ฉันมีไฟล์ข้อความที่เข้ารหัส UTF-8 บางไฟล์ซึ่งแสดงรหัสการหลบหนีที่แปลกใน Emacs ตัวอย่างเช่นข้อความนี้:

ในการตั้งค่าเริ่มต้น exponam ของพวกเขาเป็นที่รู้จักกันในชื่อ 'Deus'; secundo, respondebo quaestionem.

แสดงให้เห็นเช่นนี้ใน Emacs:

ป้อนคำอธิบายรูปภาพที่นี่

สิ่งนี้เกิดขึ้นใน Emacs เท่านั้น บรรณาธิการอื่น ๆ แสดงข้อความอย่างถูกต้อง ฉันจะแก้ไขปัญหานี้ได้อย่างไร


อัปเดต 1

ถ้าฉันโทรrevert-buffer-with-coding-systemและเลือกutf-8ไฟล์อ่านอย่างถูกต้อง ดังนั้นในขณะที่ Gilles คาดเดาได้อย่างถูกต้อง Emacs จะไม่ตรวจจับการเข้ารหัสไฟล์ หากฉันเพิ่มรหัส; -*- coding: utf-8 -*-ลงในไฟล์ Emacs จะเปิดขึ้นและแสดงอย่างถูกต้อง


อัปเดต 2

ฉันเข้ารหัสไฟล์ใหม่ใน "UTF-8 พร้อมการเข้ารหัส BOM" และตอนนี้ก็แสดงผลได้ดีใน Emacs ฉันไม่รู้ว่าอะไรคือความแตกต่างระหว่างสองประเภทนี้ แต่ Emacs ดูเหมือนจะรับรู้ถึง BOMed หนึ่งเท่านั้น


Emacs ไม่รู้จักไฟล์ในชื่อ UTF-8 เนื้อหาของไฟล์ init ของคุณคืออะไร? คุณใช้ Emacs เวอร์ชั่นใด มันเปลี่ยนแปลงอะไรถ้าคุณเริ่มต้น Emacs ด้วยemacs -qหรือemacs -Q?
Gilles 'SO- หยุดความชั่วร้าย'

ฉันไม่มีปัญหากับไฟล์ UTF-8 อื่น ๆ ฉันใช้ GNU Emacs 24.4.4 ไม่แตกต่างกันด้วยหรือemacs -q emacs -Q
NVaughan

อ่าถ้ามันทำงานกับไฟล์อื่น ๆ และอยู่ในการกำหนดค่าดั้งเดิมสาเหตุที่เป็นไปได้ว่าไฟล์นั้นมี UTF-8 ที่ไม่ถูกต้องด้วย ให้ฉันดูวิธีการบอกกับ Emacs ...
Gilles 'หยุดความชั่วร้าย'

อาจเกี่ยวข้องกับ: emacs.stackexchange.com/q/4100/2264
Sean Allred

คำตอบ:


10

ด้วยเหตุผลบางอย่าง Emacs ไม่รู้จักไฟล์เป็น UTF-8 คุณสามารถบังคับ Emacs จะเปิดแฟ้มเป็น UTF-8 โดยการเรียกใช้คำสั่งC-x RET r( revert-buffer-with-coding-system) utf-8และการป้อน

เหตุผลที่ Emacs ไม่รู้จักไฟล์นี้ในชื่อ UTF-8 (แต่รู้จักคนอื่น) มีแนวโน้มว่าไฟล์นั้นมีลำดับ UTF-8 ที่ไม่ถูกต้อง ลำดับนี้จะยังคงปรากฏเป็นแบ็กสแลชตามด้วยตัวเลขแปดฐานแปดที่มีสีแตกต่างกัน ( escape-glyphใบหน้า) หลังจากแปลไฟล์เป็น UTF-8 อีกครั้ง คุณสามารถค้นหาลำดับดังกล่าวได้โดยเรียกใช้C-M-s( isearch-regexp) และค้นหา

[^^@-~[:multibyte:]]

โดยที่^@ป้อนด้วยการพิมพ์C-q C-SPC(เป็นอักขระ ^ @ = 0 ไม่ใช่ลำดับสองตัวอักษร circumflex-at; ตัวอักษรก่อนหน้าคืออักขระ circumflex)

คุณสามารถบังคับให้ Emacs รับรู้ไฟล์เป็น UTF-8 โดยการเพิ่มตัวแปรไฟล์ระบบการเข้ารหัส : ใส่บางสิ่งบางอย่าง-*-coding: utf-8-*-ในบรรทัดแรกหรือวางบางสิ่งเช่นนี้ใกล้จุดสิ้นสุดของไฟล์ (คุณสามารถแทนที่#ด้วยคำนำหน้าใด ๆ แต่Local Variables:และEnd:ต้อง ปรากฏอย่างนี้ด้วยเครื่องหมายโคลอนต่อท้าย):

# Local Variables:
# coding: utf-8
# End:

Emacs เลือกการเข้ารหัสตามที่ไฟล์จะถูกตีความขึ้นอยู่กับการตั้งค่าต่าง ๆ ส่วนใหญ่สภาพแวดล้อมภาษาและตัวแปรและauto-coding-alist auto-coding-regexp-alistเนื่องจากคุณมีปัญหาเดียวกันกับไฟล์นี้แม้ในขณะที่ทำงานemacs -Qฉันคิดว่านี่ไม่ใช่ปัญหาของการตั้งค่าเหล่านั้น แต่มีเนื้อหาของไฟล์


ถ้าผมเปิดไฟล์โดยไม่ต้องตัวแปรการเข้ารหัสไฟล์ระบบ (เช่นเมื่อแสดงไฟล์ผิด) และเรียกใช้การค้นหา regex ทั้งหมดของฉัน\342, \200, \230ฯลฯ ได้รับเลือก แต่ถ้าฉันเปิดมัน "ถูกต้อง" (ใช้ตัวแปรการเข้ารหัส) ดังนั้นจะไม่มีผลลัพธ์การค้นหาปรากฏขึ้น
NVaughan

@NVaughan อืมม ถ้าอย่างนั้นฉันก็ไม่เข้าใจว่าทำไมไฟล์นี้ถึงไม่รู้จักในชื่อ UTF-8 เมื่อมีคนอื่น (โดยเฉพาะใต้emacs -Q)
Gilles 'หยุดความชั่วร้าย'

1

มันช้าที่จะตอบคำถามเกี่ยวกับ BOM แต่ฉันจะทำมันอย่างไรก็ตาม

เครื่องหมายคำสั่งไบต์ (BOM) เป็นลำดับสามไบต์ \ xef \ xbb \ xbf ซึ่งในตอนต้นของไฟล์บ่งชี้ถึงระบบและแอปพลิเคชันที่เนื้อหาถูกเข้ารหัสเป็น UTF-8 อย่างถูกต้องพวกเขากำลังเมตาดาต้าไม่ถือว่าเป็นส่วนหนึ่งของเนื้อหา

แอปพลิเคชั่นส่วนใหญ่ - Emacs เป็นหนึ่งในนั้น - ให้เกียรติ BOM และเขียนไฟล์ UTF-8 ทั้งหมดด้วย แอปพลิเคชันอื่นอาจให้เกียรติในการอ่าน แต่ไม่ได้เขียน และคนอื่นไม่รู้เกี่ยวกับมันและอาจโยนข้อความแสดงข้อผิดพลาดเมื่อพวกเขาพบมัน กล่าวอีกนัยหนึ่งสถานการณ์ไม่เป็นระเบียบ ฉันชอบที่จะใช้มันทุกที่ที่เป็นไปได้


-1

สำหรับระบบที่เหมือน UNIX เท่านั้น

ในหลายกรณีคำจำกัดความการเข้ารหัสที่ตรงไปตรงมาใน ~ / .bashrc ~ / bash_profile

LANG=en_EN.UTF8

สำเร็จด้วย

export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8

ใน ~ / .profile ควรแก้ปัญหาของคุณ

ป.ล. หลังจากการแก้ไขเหล่านี้คุณต้อง RELOGIN ในเซสชันเพื่อให้สามารถเห็นการเปลี่ยนแปลงได้


แม้ว่าสิ่งที่คุณพูดอาจมีประโยชน์ แต่สิ่งนี้ดูเหมือนจะไม่ตอบคำถามนี้เนื่องจากปัญหาเกิดขึ้นกับไฟล์ utf-8 บางไฟล์เท่านั้น
JeanPierre

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