2010-03-16 134 views
0

親愛的所有人,現在我在我的java程序中有這個問題,我認爲它應該歸類爲URL問題,但不是100%確定。如果您認爲我錯了,請隨意重新分類此問題,謝謝。一個與URL有關的問題

我會盡可能簡單地陳述我的問題。 我在着名的中文搜索引擎baidu.com上搜索了一箇中文關鍵詞「奧巴馬」(奧巴馬英文),我這樣做的方式是將URL(在Java程序中)傳遞給瀏覽器,如:

http://news.baidu.com/ns?word=奧巴馬

和它完美的作品就像我輸入「奧巴馬」關鍵詞在baidu.com文本字段。

不過,現在我的導師希望另一thing.Since他不能讀中文網頁,但他想確保我從百度網站獲得的網頁與「奧巴馬」有關,他要求我將谷歌翻譯回來,即使用谷歌翻譯和翻譯中文網頁爲英文網頁

這聽起來很直接。但是,我在這裏遇到了我的問題。

如果我只是將URL「http://news.baidu.com/ns?word=奧巴馬」傳遞給Google Translate,並勾選「中文到英文」翻譯選項,結果看起來很糟糕(我不知道這裏的線索,可能與中文字符編碼有關)。或者,如果現在我的瀏覽器打開「」http://news.baidu.com/ns?word=奧巴馬「網頁,但我點擊」百度一下「按鈕(簡單的說就是」搜索「),你會注意到URL會被改變,現在如果我通過這個網址到谷歌翻譯和做同樣的事情,結果效果更好。

我希望我不會讓這個問題聽起來太複雜了,我爲一些中文單詞invovled,但我真的需要你們的幫助在這裏,我做了所有這些在Java程序中,我無法弄清楚如何實現「百度一下」(按搜索按鈕)步驟,然後獲取新的URL。如果我可以得到這個新的URL,事情很簡單,我可以在Java代碼中調用Google translate,並彈出新窗口顯示我的顧問。

請在這裏分享你的想法或想法。謝謝很多。

羅伯特

回答

2

你可以使用

URLEncoder.encode("http://news.baidu.com/ns?word=奧巴馬", "utf-8") 

再通由此產生的網址爲Google Translate,例如:

http://translate.google.com/translate?js=y&prev=_t&hl=en&ie=UTF-8&layout=1&eotf=1&sl=zh-CN&tl=en&u=YOUR_URL 

乾杯

+0

謝謝,Lundodov,但第二條語句總是打開空的谷歌翻譯頁面,我該怎麼辦? – Kevin 2010-03-17 19:55:43

+0

您是否可以將用於生成URL的代碼發佈爲打開它? – lunohodov 2010-03-17 21:49:40

1

嘗試調用

URLEncoder.encode("http://news.baidu.com/ns?word=奧巴馬", "utf-8") 

(或utf-16,我不是很熟悉的中國漢字表示)

1

當按下搜索按鈕時,瀏覽器編碼搜索項%E5%A5%A5%E5%B7%B4%E9%A9%AC,這是UTF-8編碼奧巴馬。它這樣做是因爲UTF-8是HTML表單的默認編碼。

Java在內部使用UTF-16編碼,所以如果沒有指定任何內容,URL庫可能會用該編碼構建請求。

但是,我無法用Google翻譯重現您的問題 - 粘貼該URL似乎無論如何都能正常工作。

1

URL只能包含ASCII字符。所有其他字符必須轉換爲字節,然後用ASCII編碼%。然而,用什麼字符集將字符轉換爲字節沒有任何要求。建議使用UTF-8,但不是必需的。只要服務器在字符集表示它的偏好,客戶端應該尊重它並使用相同的字符集進行編碼。

您可以從頁面信息中看到百度使用gb2312編碼。其頁面上的奧巴馬字符將被轉換爲gb2312:B0C2 B0CD C2ED中的字節,然後%編碼爲%B0%C2%B0%CD%C2%ED。這是實際發送到百度服務器,http://www.baidu.com/s?wd=%B0%C2%B0%CD%C2%ED

您的操作系統恰好配置爲默認使用gb2312,因此,當您將奧巴馬粘貼到瀏覽器,瀏覽器做同樣的事情,百度得到正確的字符。當我在瀏覽器中粘貼該網址時,它會出現問題,因爲我的操作系統使用UTF-8,而瀏覽器使用UTF-8編碼這些中文字符,而不是百度期望的東西。 (當直接在瀏覽器中輸入URL時,瀏覽器可能沒有與服務器通信,也不知道服務器喜歡的字符集,因此瀏覽器使用平臺默認字符集)。

現在,Google使用UTF-8。這就是爲什麼如果你將URL粘貼到谷歌表單,它會像我的操作系統一樣搞砸了。這些字符以UTF-8編碼,百度會嘗試將其解析爲gb2312,並得到完全錯誤的單詞。

解決方案很簡單。只需按照服務器預期的方式對參數進行編碼:

"http://news.baidu.com/ns?word=" + URLEncoder.encode("奧巴馬", "gb2312")