2012-11-25 29 views
1

我用pdftk解壓縮了一個PDF文件,我試圖在Emacs中用正則表達式編輯它。搜索或轉換八進制序列

問題是這個文件有重音字符,Emacs把它們顯示爲八進制序列:用於à的\340。編輯這個文件我有兩種可能性(至少我是這麼認爲的)。

a)應用一種編碼,Emacs將顯示實際重音字符而不是其八進制等效字符。 Vim已經正確顯示重音字符;

b)用正則表達式搜索八進制序列。對於a),我嘗試了(set-buffer-file-coding-system'utf-8-dos),(set-buffer-file-coding-system'utf-8-unix),(set緩衝文件編碼系統「原始文本),但沒有成功。

至於b),在應用set-buffer-file-coding-system後,我可以用C-q ... RET遞增搜索八進制序列,但我無法做到我真正需要的:替換字符串。實際上C-q ... RET,在使用M-%C-M-%時不符合八進制序列。 C-x 8 `...也不起作用。

在此先感謝。 安東尼

+0

你能上傳一個樣本PDF的地方嗎? – user4815162342

+0

新手在這裏,希望有可能發佈鏈接。無論如何,我只是創建了一個單行測試文件: http://www.filedropper.com/test_16。 在Emacs看看第47行,並注意如何使用à手動替換'\ 340',並在PDF查看器中保存並重新打開它。 – antonio

+0

單個高位八進制字符肯定不是UTF-8。嘗試使用CP1252或CP850。 – tripleee

回答

1

嘗試在緩衝區以下關鍵序列訪問PDF文件:

CX RET [R字符編碼RET

這將重新文件使用您指定的字符編碼。

另外,如果你想指定的字符編碼之前訪問一個文件,你可以做

CX RETç字符編碼RET

之前立即打字Cx Cf

查看documentation瞭解更多詳情。

+0

問題解決了!謝謝 爲了記錄,編碼是'windows-1252-unix'別名'cp1252-unix'或通常ANSI與Uni​​x行結束。 奇怪的是'(set-buffer-file-coding-system'windows-1252-unix)'不起作用,'(用re-buffer-with-coding-system'windows-1252-unix)'。 好處在於,使用此編碼,可以修改(使用正則表達式)「未壓縮」的PDF,將其保存並在查看器中重新打開,這可能會引起其他人的興趣。 它可能仍然是搜索替代八進制代碼的主題。 – antonio

+0

@antonjo:你爲什麼說「奇怪」? 'C-h f set-buffer-file-coding-system'清楚地說:「這意味着當你保存緩衝區時,它將根據CODING-SYSTEM被轉換爲 。」 – Stefan

+0

@Stefan我想這是「奇怪的」,因爲這個命令被一些用戶覺得做的事情不是它實際做的。 antonjo尋找的是:「我有一個緩衝區中的數據,有些字符顯示不正確,我想要一個命令,根據不同的字符編碼重新解釋這些字符。」這不是'set-buffer-file-coding-system'的作用,但如果它是用戶期望的,它的行爲就會被認爲是奇怪的。這是一個可用性問題,用戶的編碼/緩衝區/文件的心智模型與Emacs實際處理這些事情的方式不匹配。 – Thomas

0

@Stefan

其實我並沒有談到儲蓄的差別,但在顯示。

在這兩種情況下,關閉和重新打開文件都會保持原樣,沒有明顯變化。 至於顯示,(set-buffer-file-coding-system 'windows-1252-unix)模式線從(Unix) ---改變爲(Unix) **-,表示代碼系統沒有發生變化,實際上緩衝區中的字符是相同的(八進制序列仍然存在)。

當使用(還原緩衝 - 與 - 編碼 - 系統「窗口1252-UNIX),模式行更改自(Unix) ---* (Unix) ---信令的代碼系統已變爲windows-12**,根據M-x list-coding-systems助記符和實際上八進制序列以其等同的重音字符顯示。

如果我將(set-buffer-file-coding-system 'windows-1252-unix)應用於其他緩衝區,例如劃痕,後者從1\--更改爲* (Unix) **。因此,對於此緩衝區,存在實際和廣告的變化,從latin-1-doswindows-1252-unix

這可能是一個連貫的設計,我不知道。

Antonio

相關問題