2012-10-20 41 views
0

我有一個包含300多個HTML文件的目錄,我需要解析數據並將其放入一個新的HTML模板,該模板與預先呈現的HTML實體(例如,出現在某些文件中的平方根。我在Ruby 1.9的閱讀噸的職位在大約編碼最後幾個小時,想的東西:File.Open encoding呈現HTML實體

File.read("_pending/testdir/filename.html", :encoding=>"UTF-8") 

trans = Iconv.new('UTF-8', 'IBM437') 
input_text = File.read("_pending/testdir/filename.html") 
output_text = trans.iconv(input_text) 
puts output_text 

所有沒有運氣。一旦轉換成平方根符號,在瀏覽器中以及原始HTML標記中仍然顯示爲√,但Iconv解決方案的輸出AªAo在控制檯puts時仍然如此。

設置

的Windows Server 2008 R2

紅寶石1.9.3p194(2012-04-20)[I386-的mingw32]

編碼名稱返回IBM437當我做HTML_FILE.external_encoding.name

+0

你確定他們是'IBM437'嗎? [Win-1252](http://en.wikipedia.org/wiki/Windows-1252)或[ISO-8859-1](http://en.wikipedia.org/wiki/ISO-8859-1)是更可能的候選人。另一種方法是做一個預先通過並將複選標記插入實體。 –

+0

我同意,但似乎很奇怪,但是當我運行下面的代碼時,我得到了'IBM437'。 'test = File.open(「filename.html」) puts test.external_encoding.name test.close' – NotJustClarkKent

+0

感謝Tin Man,事實證明,我只是一個白癡,Ruby不是一個問題,所有......感謝您代我進行此項調查。 – NotJustClarkKent

回答

2

你必須跟我開玩笑吧...

定盤設置在HTML模板頁面內容首。我猜測控制檯輸出的是有效的UTF-8,但不是以一種可識別的格式。

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

雖然我現在感到非常愚蠢的,我敢肯定,別人是怎麼回事,所以如果這是你碰到類似的事情:我覺得你的痛苦;我只希望你沒有像我那樣花最後的6小時進行故障排除。

+0

使用HTTPd服務器與實際內容混合編碼,在蜘蛛網上進行內容分析和搜索時真的很痛苦。而且,即使服務器和HTML標頭一致,用戶也可以通過多種方式將原始8位和Unicode字符插入到文檔中。試圖編寫代碼來抵禦它可能是一個真正的大腦燃燒器。 –