我有一個ANSI編碼的文本文件,不應該被編碼爲ANSI,因爲那裏有ANSI不支持的重音 字符。我寧願使用UTF-8。如何更正文件的字符編碼?
數據可以正確解碼還是在轉碼中丟失?
我可以使用哪些工具?
這裏是什麼,我有一個樣本:
ç é
我可以從上下文告訴(中央美術學院©應該是咖啡廳),這些應該是這兩個字:
ç é
我有一個ANSI編碼的文本文件,不應該被編碼爲ANSI,因爲那裏有ANSI不支持的重音 字符。我寧願使用UTF-8。如何更正文件的字符編碼?
數據可以正確解碼還是在轉碼中丟失?
我可以使用哪些工具?
這裏是什麼,我有一個樣本:
ç é
我可以從上下文告訴(中央美術學院©應該是咖啡廳),這些應該是這兩個字:
ç é
編輯:在進入更復雜的解決方案之前消除一個簡單的可能性:你有沒有嘗試在你正在閱讀文件的文本編輯器中將字符集設置爲utf8?這可能就是某個人向你發送了一個utf8文件的例子,你正在編輯器中讀取cp1252。
只是舉了兩個例子,這是一個通過單字節編碼的鏡頭讀取utf8的情況,可能是iso-8859-1,iso-8859-15或cp1252之一。如果您可以發佈其他問題角色的示例,則應該可以縮小範圍。
由於對字符的視覺檢查可能會引起誤解,您還需要查看基礎字節:您在屏幕上看到的§可能是0xa7或0xc2a7,並且這將決定您的字符集轉換類型得做。
您能否假設您的所有數據都以完全相同的方式發生了扭曲 - 它來自同一個來源並經歷了相同的轉換序列,因此例如您的應用程序中沒有一個文字,它總是?如果是這樣,問題可以通過一系列字符集轉換來解決。如果您可以更具體地瞭解您所使用的環境和您正在使用的數據庫,此處有人可能會告訴您如何執行適當的轉換。否則,如果問題字符只出現在數據中的某些位置,則必須根據假設沿着「沒有作者打算在其文本中放置ç」的假設,所以只要你看到它,用ç「替換。後一種選擇風險更大,首先是因爲那些關於作者意圖的假設可能是錯誤的,其次是因爲你必須自己發現每一個問題特徵,如果有太多的文本要進行視覺檢查或者如果它被寫入,這可能是不可能的用一種對你來說是陌生的語言或寫作系統。
用vim從命令行:
vim -c "set encoding=utf8" -c "set fileencoding=utf8" -c "wq" filename
簡單的轉換是否會假定數據是正確的並保留不良數據? – Liam 2008-09-25 10:05:43
然後有一些比較老的recode程序。
如果您在文件中看到問號或者口音已經丟失,返回到utf8將無助於您的原因。例如如果咖啡館變成了咖啡館 - 單獨改變編碼將無濟於事(你需要原始數據)。
你可以在這裏粘貼一些文字,這將幫助我們肯定地回答。
有些程序試圖檢測像chardet這樣的文件的編碼。然後你可以使用iconv將其轉換爲不同的編碼。但是,這要求原始文本仍然完好無損,並且不會丟失任何信息(例如,刪除重音符號或整個重音字母)。
當你看到像§和A©字符序列,它通常是一個UTF-8的文件已被一個程序,讀取它的ANSI(或類似)打開的指示。 Unicode字符,如這些:
U + 00C2拉丁大寫字母與迴旋
U + 00C3拉丁大寫字母與波浪A A
U + 0082歇允許在這裏
U + 0083這裏沒有休息
往往會在ANSI文字顯示,因爲變量字節的戰略,UTF-8使用的了。這個策略很好地解釋here。
您的優勢是,這些奇怪字符的出現使得查找和替換不正確轉換的實例變得相對容易。
我相信,由於ANSI總是使用每個字符1個字節,所以您可以通過簡單的搜索和替換操作來處理這種情況。或者更方便的是,使用包含有問題的序列和所需字符之間的表格映射的程序,如下所示:
「 - >」#應該是雙曲開盤報價
「 - >「#應該是一個結束雙曲線報價
任何給定的文本,假設它是英文的,將有相對少量的不同類型的替換。
希望有所幫助。
我發現了一種簡單的方法來自動檢測文件編碼 - 將文件更改爲文本文件(在Mac上將文件擴展名重命名爲.txt)並將其拖到Mozilla Firefox窗口(或文件 - >打開) 。 Firefox將檢測編碼 - 您可以在View - > Character Encoding下看到它的內容。
一旦我知道了正確的編碼,就使用TextMate更改了文件的編碼。文件 - >使用編碼重新打開並選擇您的編碼。然後將文件 - >另存爲,然後將編碼更改爲UTF-8和行結尾爲LF(或任何你想要的)
在OS X上Synalyze It!可以讓你以不同的編碼顯示你的文件的各個部分ICU圖書館)。一旦你知道什麼是源編碼,你可以通過剪貼板複製整個文件(字節),並插入到一個新的文檔中,目標編碼(UTF-8或任何你喜歡的)被選中。
使用UTF-8或其他的Unicode表示工作時非常有幫助的是UnicodeChecker
按照以下步驟用記事本++
1複製原文
2。在記事本++,打開新的文件,改變編碼 - >選擇你認爲原始文本如下的編碼。嘗試以及編碼「ANSI」因爲有時Unicode文件是由某些程序
3-粘貼
4-然後通過在同一菜單中再次將轉換爲Unicode改爲ANSI:編碼 - >「編碼UTF-8「(不是」轉換爲UTF-8「),並希望它變得可讀
以上步驟適用於大多數語言。在粘貼記事本++之前,您只需要猜測原始編碼,然後通過相同的菜單轉換爲另一種基於Unicode的編碼,以查看事物是否可讀。
大多數語言都以兩種編碼形式存在:1-大多數計算機最初使用舊的傳統ANSI(ASCII)格式,只有8位。 8位僅允許256種可能性,其中128種常用拉丁字符和控制字符,最後128位根據PC語言設置的不同而被讀取。2新的Unicode標準(最多32位)爲每個字符提供唯一的代碼在所有當前已知的語言中,還有很多更多。如果文件是unicode,則應在任何安裝了該語言字體的PC上理解。請注意,即使UTF-8上升到32位,只是與UTF-16和UTF-32一樣寬泛,只是它試圖保留8位拉丁字符只是爲了節省磁盤空間
我在搜索時發現此問題對於我用中文字符代碼頁問題的解決方案,但最終,我的問題只是Windows的問題,而沒有在UI中正確顯示它們。
如果其他人有同樣的問題,你可以通過簡單的改變windows中的本地到中國然後再回來修復它。
我發現這裏的解決方案:
也upvoted加布裏埃爾的答案尋找在記事本中的數據++是什麼放倒我了約窗口。
在崇高的文本編輯器中,文件 - >重新打開編碼 - >選擇正確的編碼。
一般情況下,編碼是自動檢測的,但如果沒有,您可以使用上述方法。
您是否知道文件的原始編碼(假設它在某個點從一個字符集轉換到另一個字符集)?如果是這樣,您應該能夠通過使用像[這一個](http://www.alanwood.net/demos/charsetdiffs.html)這樣的表格將結果字符映射回原始字符。如果您不知道原始編碼,則可以使用概率方法,根據您使用的語言中不同單詞的頻率進行編碼。但是你可能不願意投入需要的工作。 – gregory 2008-09-25 09:39:08
不幸的是,不,我不知道原始編碼。當客戶向您發送在各種系統上製作的文件時,這是一個常見問題。他們可能不知道字符編碼是什麼。請注意,默認情況下越來越多地採用使用UTF-8的Linux桌面可以透明地解決這個問題。 – Liam 2008-09-25 09:52:35
我完全同意。不幸的是,UTF-8絕對是大多數情況下使用的最合理的編碼方式,但很難期望客戶理解或採取行動。 – gregory 2008-09-25 12:27:17