вопрос, связанный с URL - PullRequest
       11

вопрос, связанный с URL

0 голосов
/ 16 марта 2010

Дорогие все, теперь у меня есть этот вопрос в моей Java-программе, я думаю, что он должен быть классифицирован как проблема URL, но не уверен на 100%. Если вы считаете, что я ошибаюсь, не стесняйтесь повторно классифицировать эту проблему, спасибо.

Я бы изложил свою проблему как можно проще. Я выполнил поиск в известной китайской поисковой системе baidu.com по ключевому слову на китайском языке «奥巴马» (Обама на английском языке), и я сделал так, чтобы передать URL-адрес (в программе Java) браузеру, например:

http://news.baidu.com/ns?word=奥巴马

, и он отлично работает, как если бы я вводил ключевое слово "奥巴马" в текстовое поле на baidu.com.

Однако, теперь мой советник хочет другого. Поскольку он не может читать китайские веб-страницы, но он хочет убедиться, что веб-страницы, которые я получил от Baidu.com, связаны с «Обамой», он попросил меня перевести их обратно в Google. , т. е. с помощью гугл-перевода и перевода китайской веб-страницы на английскую.

Это звучит просто. Однако я встретил здесь свою проблему.

Если я просто передам URL-адрес "http://news.baidu.com/ns?word=奥巴马" в Google Translate и поставлю галочку для опции перевода" с китайского на английский ", результат будет ужасным. (Я не знаю подсказки, возможно, связанной с кодировкой китайских символов"). ).

В качестве альтернативы, если теперь мой браузер открывает "" http://news.baidu.com/ns?word=奥巴马" веб-страницу, но я нажимаю кнопку "百度 一下" (что просто означает "поиск"), вы заметите, что URL будет изменен, теперь, если Я передаю этот URL в Google переводчик и делаю то же самое, результат работает намного лучше.

Надеюсь, я не делаю эту проблему слишком сложной, и я прошу прощения за некоторые включенные китайские слова, но мне действительно нужна помощь ваших парней. Так как я делал все это в программе на Java, я не мог понять, как понять, что «百度 一下» (нажатие кнопки поиска), затем получить новый URL. Если бы я мог получить этот новый URL, все просто, я мог бы просто позвонить Google translate в своем Java-коде и открыть новое окно, чтобы покажи мой советник.

Пожалуйста, поделитесь своими идеями или идеями здесь. Большое спасибо.

Роберт

Ответы [ 4 ]

2 голосов
/ 16 марта 2010

Вы можете использовать

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

затем передайте полученный URL в 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

Приветствия

1 голос
/ 16 марта 2010

URL могут содержать только символы ASCII. Все остальные символы должны быть преобразованы в байты, а затем кодированы в% в ASCII. Однако нет никакого мандата на то, какая кодировка используется для преобразования символов в байты. UTF-8 рекомендуется, но не обязателен. Пока сервер выражает свои предпочтения в кодировке, клиент должен уважать это и использовать ту же кодировку для кодирования.

На странице информации видно, что baidu использует кодировку gb2312. Символы 奥巴马 в форме на его странице будут преобразованы в байты в gb2312: B0C2 B0CD C2ED, затем% -кодированы в %B0%C2%B0%CD%C2%ED. Это то, что фактически отправлено на сервер Baidu, http://www.baidu.com/s?wd=%B0%C2%B0%CD%C2%ED

Ваша ОС по умолчанию настроена на использование gb2312, поэтому, когда вы вставляете http://news.baidu.com/ns?word= 奥巴马 в браузер, браузер делает то же самое, и baidu получает правильные символы. Когда я вставляю этот URL в мой браузер, он облажается, потому что моя ОС использует UTF-8, а браузер кодирует эти китайские символы в UTF-8, а не что-то, что ожидает baidu. (при вводе URL-адреса непосредственно в браузере браузер может не взаимодействовать с сервером и не знает кодировку, которую предпочитает сервер, поэтому браузер использует кодировку платформы по умолчанию)

Теперь Google использует UTF-8. Вот почему, если вы вставите URL в форму Google, она будет испорчена, как в моей ОС. Символы кодируются в UTF-8, и baidu попытается проанализировать его как gb2312, и получит совершенно неправильные слова.

Решение легко. Просто закодируйте параметр так, как ожидает сервер:

"http://news.baidu.com/ns?word=" + URLEncoder.encode("奥巴马", "gb2312")
1 голос
/ 16 марта 2010

Когда вы нажимаете кнопку поиска, браузер кодирует поисковый термин в %E5%A5%A5%E5%B7%B4%E9%A9%AC, который является кодировкой UTF-8 для 奥巴马. Это происходит потому, что UTF-8 является кодировкой по умолчанию для форм HTML.

Java использует внутреннюю кодировку UTF-16, поэтому возможно, что библиотека URL-адресов создаст запрос в этой кодировке, если вы ничего не укажете.

Однако я не смог воспроизвести вашу проблему с помощью Google Translate - вставка этого URL-адреса работала правильно, независимо от того, как я это сделал.

1 голос
/ 16 марта 2010

Попробуйте позвонить

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

(или utf-16; я не совсем знаком с представлением китайских символов)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...