Sekizli diziler utf-8 metnine nasıl değiştirilir


9

Ascii olmayan metinleri Windows'tan kopyalayıp Emacs'a yapıştırdığımda, bir sekizli sıra olarak görünür. Örneğin, ä Emacs'a yapıştırırsam \ 344 olarak görünür.

Emacs geri ä almak için Cq 344 yazabilirsiniz. Bu sinir bozucu, ama sadece bir karakter varsa tolere edilebilir. Ancak sekizli kaçış dizilerine dönüştürülen çok sayıda karakter varsa, içindeki her şeyi dönüştürmek için bir bölgede bazı komutlar çalıştırmak uygun olacaktır. Zaten böyle bir komut var mı? Değilse, bunu yapmak için nasıl bir işlev yazardınız?

[.Emacs dosyamdaki varsayılan kodlama sistemimi utf-8 olarak ayarladım ve Windows ve Linux'ta aynı .emacs dosyasını kullanıyorum. Ancak sorun yalnızca bir Windows uygulamasından Emacs'a kopyalanırken ortaya çıkar. Emacs'tan başka bir Windows uygulamasına kopyalamak işe yarar.]


1
Bence istediğin şey revert-buffer-with-coding-system(belgelerine bakınız). Emacs karakterleri bu şekilde gösterir, çünkü onları farklı kodlama sistemindeki bir ortamdan kopyaladınız (ANSI'yi aksanlarla Latince oluşturmak için kullanılan yüksek ASCII karakterleriyle varsayalım), ancak arabelleğiniz UTF-8 gibi bir şey kullanıyor olmalıdır set değeri yüksek olan ASCII karakterlerinin bir anlamı yoktur, yani geçersizdir).
wvxvw

1
Ya da belki set-clipboard-coding-system. C-h a coding-systemBu gruptaki diğer işlevlerin neler olduğunu görmeye çalışın .
wvxvw

Gördüğünüz \ 344, bir yapılandırma sorununun sonucudur. Aslında bunu "düzeltmek" için bir komut yerine, neden ilk etapta aldığınızı araştırmalısınız. Örneğin ile başlayın emacs -Qve sorunu zaten görüyorsanız M-x report-emacs-bug,.
Stefan

@Stefan Bazen, "neden anlıyorsunuz?" Açıktır, ancak bu durumdan sonra onu düzeltmenize yardımcı olmaz. Örneğin, sadece bir sonucu olarak bu sorunu yaşadım insert-file-literally(ve dosyayı geri almak veya silmek / yeniden eklemek için çok geç).
T. Verron

@Stefan, Emacs dışında bunun birkaçına neden olabilecek çok fazla yanlış yapılandırma olabilir: biri BOM'u orijinal olarak bazı cp-12XX tek baytlı kodlamadaki bir dosyaya kaydetti, bu da metnin kopyalandığı kaynak düzenleyiciyi karıştırdı, kaynak editörü yanlış pano vb içerik türünü bildirdi. Ben aslında yanlış kodlanmış bazı eski ASP kaynakları düzenlerken bunu çok görmek için kullanılır.
wvxvw

Yanıtlar:


4

Benim .emacs dosyamın rahatsız edici kısmı oldu (set-selection-coding-system 'utf-8). Bu çizgiyi kaldırdığımda, Emacs beklendiği gibi davrandı.


2

Bunu yaptıktan sonra:

(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 ""))))

https://launchpad.net/sx-emacs-werkstatt adresindeki misc-utils.el sitesinden

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.