วิธีการเปลี่ยนลำดับเลขฐานแปดให้เป็นข้อความ utf-8


9

เมื่อฉันคัดลอกข้อความที่ไม่ใช่ ASCII จาก Windows และวางลงใน Emacs ข้อความจะปรากฏขึ้นตามลำดับเลขฐานแปด ตัวอย่างเช่นถ้าฉันวางäลงใน Emacs มันจะปรากฏเป็น \ 344

ฉันพิมพ์ Cq 344 เพื่อรับäใน Emacs ได้ มันน่ารำคาญ แต่ก็ทนได้ถ้ามีตัวละครเพียงตัวเดียว แต่ถ้ามีตัวละครจำนวนมากเปลี่ยนเป็นซีเควนซ์ลำดับเลขฐานแปดมันจะสะดวกในการรันคำสั่งบางอย่างในพื้นที่เพื่อแปลงทุกอย่างภายใน มีคำสั่งดังกล่าวอยู่แล้วหรือไม่? ถ้าไม่คุณจะเขียนฟังก์ชั่นได้อย่างไร

[ฉันตั้งค่าระบบการเข้ารหัสเริ่มต้นของฉันเป็น utf-8 ในไฟล์. emacs ของฉันและฉันใช้ไฟล์. emacs เดียวกันบน Windows และ Linux แต่ปัญหาจะเกิดขึ้นเฉพาะเมื่อคัดลอกจากแอปพลิเคชัน Windows ไปยัง Emacs การคัดลอกจาก Emacs ไปยังแอปพลิเคชัน Windows อื่นทำงานได้ดี]


1
ฉันคิดว่าสิ่งที่คุณต้องการคือrevert-buffer-with-coding-system(ดูมันเป็นเอกสาร) Emacs แสดงอักขระด้วยวิธีนี้เนื่องจากคุณคัดลอกมาจากสภาพแวดล้อมที่อยู่ในระบบการเข้ารหัสที่ต่างกัน (สมมติว่า ANSI ที่มีตัวอักษร ASCII สูงที่ใช้เรียกการแสดงละตินที่มีเครื่องหมายกำกับ) แต่บัฟเฟอร์ของคุณต้องใช้ UTF-8 อักขระ ASCII ใดที่มีชุดบิตสูงไม่มีความหมายกล่าวคือไม่ถูกต้อง)
wvxvw

1
set-clipboard-coding-systemหรือแม้กระทั่ง ลองC-h a coding-systemดูฟังก์ชันอื่น ๆ ในกลุ่มนี้ที่มี
wvxvw

\ 344 ที่คุณเห็นเป็นผลมาจากปัญหาการกำหนดค่า แทนที่จะสั่งให้ "แก้ไข" หลังจากข้อเท็จจริงคุณควรตรวจสอบว่าทำไมคุณถึงได้รับมันตั้งแต่แรก เช่นเริ่มต้นด้วยemacs -Qและถ้าคุณเห็นปัญหามีอยู่แล้ว, M-x report-emacs-bug.
Stefan

@tefan บางครั้ง "ทำไมคุณถึงได้" เห็นได้ชัด แต่นั่นจะไม่ช่วยให้คุณแก้ไขได้หลังจากความจริง ตัวอย่างเช่นฉันเพิ่งมีปัญหานี้เป็นผลมาจากinsert-file-literally(และมันก็สายเกินไปที่จะยกเลิกหรือลบ / แทรกไฟล์อีกครั้ง)
ต. Verron

@Stefan อาจมีการกำหนดค่าผิดพลาดมากมายนอก Emacs ซึ่งอาจทำให้เกิดสิ่งนี้เพื่อระบุชื่อบางคน: ใครบางคนบันทึก BOM ลงในไฟล์ซึ่ง แต่เดิมในการเข้ารหัสไบต์เดียว cp-12XX ซึ่งสับสนตัวแก้ไขซอร์สที่ข้อความถูกคัดลอกมาจาก เครื่องมือแก้ไขแหล่งที่มารายงานประเภทของเนื้อหาในคลิปบอร์ดไม่ถูกต้องฉันเคยเห็นสิ่งนี้มากเมื่อแก้ไขแหล่งข้อมูล ASP โบราณบางส่วนซึ่ง แต่เดิมเข้ารหัสไม่ถูกต้อง
wvxvw

คำตอบ:


4

แต่กลับกลายเป็นส่วนหนึ่งของการกระทำผิดของไฟล์ .emacs (set-selection-coding-system 'utf-8)ของฉันคือ เมื่อฉันลบบรรทัดนั้น Emacs ทำงานตามที่คาดไว้


2

ทำครั้งนี้:

(defun umlaute ()
  "Fix wrongly inserted characters, commonly from pasting. "
  (interactive "*")
  (save-excursion
    (goto-char (point-min))
    (while (re-search-forward (concat "\\\344\\|"(list 228)) nil 1)
      (replace-match "ä"))
    (goto-char (point-min))
    (while (re-search-forward (concat "\\\304\\|"(list 196)) nil t 1)
      (replace-match "Ä"))
    (goto-char (point-min))
    (while (re-search-forward (concat "\\\366\\|"(list 246)) nil t 1)
      (replace-match "ö"))
    (goto-char (point-min))
    (while (re-search-forward (concat "\\\326\\|"(list 214)) nil t 1)
      (replace-match "Ö"))
    (goto-char (point-min))
    (while (re-search-forward (concat "\\\374\\|"(list 252)) nil t 1)
      (replace-match "ü"))
    (goto-char (point-min))
    (while (re-search-forward (concat "\\\334\\|"(list 220)) nil t 1)
      (replace-match "Ü"))
    (goto-char (point-min))
    (while (re-search-forward (concat "\\\337\\|"(list 223)) nil t 1)
      (replace-match "ß"))
    (goto-char (point-min))
    (while (re-search-forward "\\\201" nil t 1)
      (replace-match ""))))

จาก misc-utils.el ที่https://launchpad.net/sx-emacs-werkstatt

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