8進数シーケンスをutf-8テキストに変更する方法


9

WindowsからASCII以外のテキストをコピーしてEmacsに貼り付けると、8進数のシーケンスとして表示されます。たとえば、äをEmacsに貼り付けた場合、\ 344と表示されます。

Cq 344と入力して、Eをäに戻すことができます。面倒ですが、キャラクターが1人しかいなくても問題ありません。しかし、8進数のエスケープシーケンスに変換された多くの文字がある場合は、領域でコマンドを実行してすべてを内部に変換すると便利です。そのようなコマンドはすでにありますか?そうでない場合、それを行う関数をどのように記述しますか?

[.emacsファイルでデフォルトのコーディングシステムをutf-8に設定し、WindowsとLinuxで同じ.emacsファイルを使用しています。しかし、この問題は、WindowsアプリケーションからEmacsにコピーするときにのみ発生します。Emacsから別のWindowsアプリケーションへのコピーは正常に動作します。]


1
あなたが望むのはそれだと思いますrevert-buffer-with-coding-system(ドキュメントを参照してください)。Emacsは、別のコーディングシステムにある環境から文字をコピーしたため、このように文字を表示します(発音記号を使用してラテン語をレンダリングするために使用される、いわゆる高ASCII文字のANSIを想定)が、バッファーはUTF-8(上位ビットが設定されているどのASCII文字が意味を持たないか、つまり無効であるか)。
wvxvw 14

1
または、多分set-clipboard-coding-systemC-h a coding-systemこのグループの他のどの機能が利用できるか見てみてください。
wvxvw 14

表示される\ 344は、構成の問題の結果です。事実の後でそれを「修正」するコマンドではなく、最初にそれを取得する理由を調査する必要があります。例えば、で始まるemacs -Q、そしてあなたはすでにそこに問題を参照してください場合M-x report-emacs-bug
ステファン

@Stefan時々、「なぜそれを得るのか」は明白ですが、それは事後の修正には役立ちません。たとえば、結果としてこの問題が発生しましたinsert-file-literally(ファイルを元に戻したり、削除/再挿入したりするには遅すぎました)。
T. Verron、2014

@Stefanいくつか例を挙げると、これを引き起こす可能性のあるEmacsの外部の非常に多くの設定ミスがある可能性があります。ソースエディターが誤ってクリップボードなどのコンテンツの種類を報告しました。元々誤ってエンコードされたいくつかの古いASPソースを編集するときに、これをよく見ました。
wvxvw 14

回答:


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

https://launchpad.net/sx-emacs-werkstattの misc-utils.elから

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.