2011-08-28 33 views
2

我使用gnu emacs 23.3.1在Windows 7 64位上創建了一個普通的文本文件。我可以使用LinqPad等其他程序編輯文件(該文件恰好是linqpad腳本,擴展名爲.linq)。一切都很好,直到我把一個Unicode字符放在文件中,像希臘字母λ(lambda)這樣的字符。我可以在emacs中輸入該字母並正確顯示。然而,Emacs將拒絕保存文件,報告下列錯誤Emacs在使用unicode保存文件時加載字符集映射失敗

Failure in loading charset map: 8859-7 

如果我輸入LinqPad的λ,Emacs會讀取並顯示出來,但不會保存文件。

我剛剛注意到Notepad ++對這個文件有其他意想不到的行爲:它不顯示λ,而是顯示一對奇怪的字符,例如λ。這適合於unuding(雙關語意思)的unicode字符被存儲成對。所以看起來這是一種模糊的情況(將unicode存儲在文本文件中),但它看起來也像linqPad和visual studio「做了顯而易見的事情」。

我想使用emacs,因爲它是唯一一個能夠重排註釋行序列的程序(//之後的行,使用Alt-Q重排它們),並且我希望在我的評論中使用希臘字符, m描述一個數學程序。

我將不勝感激的意見和答案。

更新:在其他問題的一些建議,說要嘗試M-X描述字符,也綁定到C-x =;這兩個人都給了我與上面相同的失敗信息,所以他們在正確的軌道上,只是沒有答案。

回答

1

我只注意到記事本++與此文件其他意外的行爲:它不顯示λ S,而是對奇怪的字符,如λ

λ是當你使用的編碼ISO-8859-1解釋字節序列0xCE,爲0xBB你會得到什麼,或Windows代碼頁1252(西歐)。代碼頁1252可能是您計算機上的默認('ANSI')代碼頁。

0xCE,0xBB是編碼的字符λ(U + 03BB希臘小寫字母lambda)。所以爲了正確顯示它,你需要告訴你的文本編輯器該文件是以UTF-8而不是ANSI保存的。

在Notepad ++中,從菜單欄'Encoding'條目中選擇UTF-8。

在Emacs中,C-x C-m c utf-8-dos(或unix或其他)作爲打開或保存文件的前綴。希望通過UTF-8保存,您將避免ISO 8859-7(希臘語)地圖出現問題;你當然不希望在8859-7中保存任何文件,或者確實不想保存UTF-8以外的任何文件,只要你能提供幫助。

+0

這是很好的信息,我越來越接近 - 我的emacs安裝中的Cx Cm立即執行「save-some-buffers-without-asked」,並且不等我放入「c」,其餘。我不確定與C-x C-m綁定的原始密鑰是什麼,也不知道如何查明。搜索「apropos」「utf-8-dos」沒有任何發現。接下來我將嘗試新鮮的emacs安裝,因爲這是一個非常古老的數據庫,我從同事那裏獲得了數百個定製的elisp文件。 –

+1

嗯,'C-X C-m c'在Linux上適用於我(默認情況下它是'utf-8-unix')。我沒有Windows Emacs,但我認爲默認綁定應該是相同的... – bobince

+0

好吧,繞過所有舊的定製,釋放了'C-x C-m c',它確實接受了保存命令的'C-x C-m c utf-8-dos',但仍然對加載8859-7失敗。我想知道是否可以直接在文件中輸入0xCE 0xBB,當我指定utf-8-dos時,emacs可能會決定保存它。我現在輸入λ的方式是通過Windows鍵盤軟件(控制面板,區域),並且λ在emacs窗口窗格中直接顯示爲該字形。通常,C-q讓我鍵入像其他控制字符一樣的非標準字符,但我不知道如何鍵入0xCE 0xBB。越來越近! –