2015-11-06 202 views
1

我有一個文本文件充滿了非ASCII字符。 我無法通過fileenca檢測到編碼。如何把「二進制文本」轉換爲「可見文本」?

file non_ascii.txt 
non_ascii.txt: Non-ISO extended-ASCII text 

enca non_ascii.txt 
Unrecognized encoding 

但我可以在Windows記事本++

編輯正常打開:上面的表達導致誤解。非常遺憾。事實上,我選擇了原始文件的一些部分,並將它們放到新的文本文件中,然後在記事本++中打開。

2部分顯示如下。它們通過記事本++以兩種不同的方式解碼。 enter image description here

enter image description here

問:

  1. 我怎麼能發現linux下的編碼文件?
  2. 我該如何恢復<F1><EE><E9><E4><FF>代表的字符? 即使「сойдя」被編碼爲<F1><EE><E9><E4><FF>,我仍無法獲得「grep'сойдя'win.txt」的結果?

文件內容分片如下:

less non_ascii.txt 
"non_ascii.txt" may be a binary file. See it anyway? 
<F1><EE><E9><E4><FF> 
<F2><F0><E0><EA><F2><EE><E2><E0><F2><FC><F1><FF> 
<D0><F2><E9><E4><D7><E9><E7><E1><EC><E1><F3><F8> 
<D1><E5><EA><F3><ED><E4> 
<F0><E0><E7><E3><F0><F3><E7><EA><E8> 
<EF><EE><E4><F1><F2><E0><E2><EB><FF><F2><FC> 
<F0><E0><E7><E3><F0><F3><E7><EA><E5> 
<F1><EE><E9><E4><F3> 
<F0><E0><E7><E3><F0><F3><E7><EA><E0> 
<F1><EE><E2><EB><E0><E4><E0><EB><E8> 
<C1><D7><E9><E1><F0><EF><FE><F4><E1> 
<CB><C1><D3><D3><C9><D4><C5><D2><C9><D4> 
<F1><EE><E2><EB><E0><E4><E0><EB><EE> 
<F1><EE><E9><E4><E8> 
<F1><EE><E2><EB><E0><E4><E0><EB><E0> 
+1

'notepad ++'認爲編碼是什麼?它應該說在狀態欄的某個地方。 – nneonneo

+0

我從文件中得到2個片段。他們正在顯示「Windows-1251」和「ANSI」。文件中可能包含其他編碼。那麼有什麼方法將混合編碼的內容轉換爲UTF-8? – user1744585

+0

您的文件包含以不同方式編碼的部分? – nneonneo

回答

2

你的問題實際上有兩個部分:(1)我怎麼識別未知編碼和(2)我怎麼將其轉換成有用的東西?

第一部分是真正的挑戰,實際上不能用普遍的術語來回答 - 在一般情況下,沒有可靠的方法來識別未知的8位編碼。一些編碼給你提供了很好的提示(UTF-8是一個很好的例子),在很多情況下,如果你有一個好主意,文本應該代表什麼,那麼問題就可以解決。

A mapping of 8-bit character meanings可能有幫助(咳嗽,鏈接是我的),在這種情況下,快速暗示Windows code page 1251。十六進制轉儲的榮譽和您期望的代表圖片!

因爲這樣,轉換很容易。

iconf -f cp1251 -t utf-8 non_ascii.txt >utf8.txt 

前提是你的Linux系統是建立在你的終端使用UTF-8,你grep命令應該utf-8.txt現在的工作。

某些文本是「ANSI」(反正是一個假的術語)的表示可能只是一個紅鯡魚 - 就我所知,您的摘錄中的所有內容看起來都是格式良好的CP1251。

+0

另請參閱http://www-archive.mozilla.org/projects/intl/UniversalCharsetDetection.html – tripleee

相關問題