Java 关于URL的一个问题

Java 关于URL的一个问题,java,internationalization,Java,Internationalization,亲爱的各位,现在我在java程序中遇到了这个问题,我认为它应该被归类为URL问题,但不是100%确定。如果你们认为我错了,请随意重新归类这个问题,谢谢 我会尽可能简单地陈述我的问题。 我在著名的中文搜索引擎百度上搜索了一个中文关键词“奥巴马" (英文为Obama),我这样做的方式是将URL(在Java程序中)传递到浏览器,如: 它就像我输入的“奥巴马”百度上文本字段中的关键字 然而,现在我的顾问想要的是另一件事,因为他看不懂中文网页,但他想确定我从百度获得的网页与“奥巴马”有关,他让我用谷歌翻

亲爱的各位,现在我在java程序中遇到了这个问题,我认为它应该被归类为URL问题,但不是100%确定。如果你们认为我错了,请随意重新归类这个问题,谢谢

我会尽可能简单地陈述我的问题。 我在著名的中文搜索引擎百度上搜索了一个中文关键词“奥巴马" (英文为Obama),我这样做的方式是将URL(在Java程序中)传递到浏览器,如:

它就像我输入的“奥巴马”百度上文本字段中的关键字

然而,现在我的顾问想要的是另一件事,因为他看不懂中文网页,但他想确定我从百度获得的网页与“奥巴马”有关,他让我用谷歌翻译回来,即使用谷歌翻译,并将中文网页翻译成英文

这听起来很简单。然而,我在这里遇到了我的问题

如果我只是将URL“”传递到Google Translate并勾选“中文到英文”翻译选项,结果看起来很糟糕(我不知道这里的线索,可能与汉字编码有关)

或者,如果现在我的浏览器打开“”网页,但我单击百度一下按钮(简单的意思是“搜索”),你会注意到URL将被更改,现在如果我将此URL传递到Google translate并执行相同的操作,结果会更好

我希望我没有把这个问题说得太复杂,我对其中涉及的一些中文单词表示歉意,但我真的需要你们的帮助。因为我是在Java程序中完成这一切的,所以我不知道如何实现这一点。”百度一下(按搜索按钮)第二步,然后获取新的URL。如果我能够获取新的URL,事情就简单了,我可以在Java代码中调用Google translate,然后弹出新窗口显示我的顾问

请在这里分享你的想法。非常感谢

罗伯特

试着打电话

URLEncoder.encode("http://news.baidu.com/ns?word=奥巴马", "utf-8")
(或者
utf-16
;我不太熟悉汉字表示法)

试着打电话

URLEncoder.encode("http://news.baidu.com/ns?word=奥巴马", "utf-8")
(或者
utf-16
;我不太熟悉汉字表示法)

您可以使用

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
干杯

你可以用

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

欢呼声

当您按下搜索按钮时,浏览器将搜索词编码为
%E5%A5%A5%E5%B7%B4%E9%A9%AC
,这是
奥巴马。之所以这样做,是因为UTF-8是HTML表单的默认编码

Java在内部使用UTF-16编码,因此,如果不指定任何内容,URL库可能会在该编码中生成请求


但是,我无法重现您在谷歌翻译粘贴上的问题—无论我如何粘贴,该URL似乎都能正常工作。

当您按下搜索按钮时,浏览器将搜索词编码为
%E5%A5%A5%E5%B7%B4%E9%A9%AC
,这是
的UTF-8编码奥巴马。之所以这样做,是因为UTF-8是HTML表单的默认编码

Java在内部使用UTF-16编码,因此,如果不指定任何内容,URL库可能会在该编码中生成请求


但是,我无法重现您在Google translate中遇到的问题-粘贴该URL时,无论我如何操作,似乎都能正常工作。

URL只能包含ASCII字符。所有其他字符都必须转换为字节,然后以ASCII编码。但是,没有关于使用什么字符集将字符转换为字节的规定。UTF-8是reCommmended,但不是必需的。只要服务器表示其对字符集的偏好,客户端就应该尊重这一点,并使用相同的字符集进行编码

您可以从页面信息中看到百度使用gb2312编码奥巴马 在其页面上的一个表单将被转换为gb2312中的字节:
B0C2 B0CD C2ED
,然后%-编码为
%B0%C2%B0%CD%C2%ED
。这就是实际发送到百度服务器的内容,
http://www.baidu.com/s?wd=%B0%C2%B0%CD%C2%ED

您的操作系统默认配置为使用gb2312,因此当您粘贴奥巴马 对于浏览器来说,浏览器也会做同样的事情,百度会得到正确的字符。当我将URL粘贴到浏览器中时,它会出错,因为我的操作系统使用UTF-8,而浏览器将这些汉字编码为UTF-8,这不是百度所期望的。(直接在浏览器中输入URL时,浏览器可能未与服务器通信,也不知道服务器首选的字符集,因此浏览器使用平台默认字符集)

现在,谷歌使用UTF-8。这就是为什么如果你将URL粘贴到谷歌表单上,它会像在我的操作系统上一样出错。字符编码为UTF-8,百度会尝试将其解析为gb2312,并得到完全错误的单词

解决方案很简单。只需按照服务器期望的方式编码参数:

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

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,因此当您粘贴奥巴马 对于浏览器来说,浏览器也会做同样的事情,百度会得到正确的字符。当我将URL粘贴到浏览器中时,它会出错,因为我的操作系统使用UTF-8,而浏览器会对这些中文字符进行编码