2013-02-10 52 views
1

我正在研究一個小型網絡爬蟲... 我遇到了重音問題,例如,如果網頁有一個Apuntó這個詞,當我puts控制檯(CMD.EXE)顯示我apunt├│,我認爲這是一件與CMD編碼相關的,但是當我打印的一個文件,我得到的確切apunt├│字...從網絡請求中刪除字符串中的口音

如果我做了puts "apuntó"輸出是正確的我得到apuntó

任何想法發生了什麼?

謝謝!

回答

4

看起來你需要去了解字符編碼。 Joel Spolsky的文章The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)是一個很好的開始。之後,我推薦詹姆斯格雷的series of blog post on character encoding in Ruby

在你的情況發生了什麼是這樣的。當你的爬蟲抓取的網頁,這個詞Apuntó是被取爲字節

0x41 0x70 0x75 0x6e 0x74 0xc3 0xb3 

是字詞的編碼UTF-8。在此編碼中,字母ó被編碼爲兩個字節,即0xc30xb3。但是,您的軟件不知道編碼,並假定字節表示默認字符集中的字符,看起來像codepage 437,所以它們顯示爲,對於0xc3,對於0xb3

處理這個問題的方法是確保每次有任何文本從外部進入程序時,您都會知道文本所在的編碼,並對其進行適當的解釋。在網頁的情況下,這可能是一個棘手的問題,因爲編碼可以在幾個地方指定,包括在頁面本身

當你知道更多關於字符編碼的知識時,應該更清楚你需要做什麼。

+0

老兄!非常感謝你,這是一個非常棒的答案! – Andres 2013-02-11 01:03:28