- 我透過將不同來源(網頁、其他文字檔案、pdf 檔案)的不同部分複製到 gedit 並將其儲存到檔案中來建立一個文字檔案。我想這就是我在文字檔案中有多種編碼的原因,但我不確定。如何透過將不同來源的不同部分複製到 gedit 來避免建立具有混合編碼的文字檔案?
每當我在 gedit 中開啟檔案時,gedit 始終可以正確顯示或解碼文字的每個部分。似乎 gedit 可以處理混合編碼的文字文件,但我不確定。
但是當我在emacs中開啟該檔案時,會出現無法正確顯示的字元。 (我不確定為什麼 emacs 不能這樣做。)所以我想將檔案從混合編碼轉換為單一編碼,例如 utf-8。
由於我認為 gedit 可以檢測到文字檔案不同部分的正確編碼,而且我不知道是否有其他應用程式可以這樣做,是否可以要求 gedit 將檔案轉換為 utf-8,或至少告訴我它為檔案的哪一部分找到了什麼編碼?
謝謝。
答案1
嗯……老實說,具有各種編碼的文件的概念有點不穩定。如果你有一點時間,本文(和這個)值得一讀。
對於 Linux 來說,檔案是一個位元組序列。如果您要求程式將其解釋為文字文件,它會使用位元組和字元之間的映射來完成此操作;這個映射就是編碼。我所知道的幾乎所有文字編輯器(不是文字處理器!)都只是理解一個文件的一種編碼的概念。
我不是這方面的專家gedit
;也許它正在做一些魔法,例如嘗試逐行自動檢測編碼或逐文本塊自動檢測編碼...如果是這種情況,您可以嘗試使用以下命令執行相同操作enca
(1):
while read line; do echo $line | enconv -L none -x utf8; done < text.mixed > text.utf8
……但這取決於 enca 在猜測您的編碼方面有多好(例如,對於東歐幾乎可以很好地工作,但對於 Latin1 則不然)。
(1) 它在儲存庫中,只需使用sudo apt-get enca
.
答案2
我也遇到了同樣的問題,用Emacs解決了。解決方案引用自這裡:
另一個可能的解決方案是標記每個出現漢字的區域,並使用Mx recode-region 對其進行重新編碼,將“文本確實在”中指定為utf-16-le,將“但是被解釋為”指定為utf-16-be。
另一種是將編碼不同的兩部分分開,複製到不同的文件中,轉換一個的編碼並將其添加到另一個文件中。就我而言,這適用於 Atom,但不適用於 Notepad++ (utf16-le/be)。