对URL字符串进行编码的最佳方法是什么,使它们符合rfc2396并解码符合rfc2396的字符串,例如将%20替换为空格字符?
编辑:URLEncoder和URLDecoder类不编码/解码符合rfc2396的URL,它们编码为MIME类型application/x-www-form-urlencoded,用于编码HTML表单参数数据.
我正试图从谷歌的文字转语音功能中提取音频文件.基本上,你抛出链接,然后连接你想要在它结束时说出的任何内容.我已经得到以下代码,对英语工作得很好,所以我认为问题必须是如何在请求中对汉字进行编码.这是我得到的:
String text = "text to be spoken";
public static final String AUDIO_CHINESE= "http://www.translate.google.com/translate_tts?tl=zh&q=";
public static final String AUDIO_ENGLISH = "http://www.translate.google.com/translate_tts?tl=en&q=";
URL url = new URL(AUDIO_ENGLISH + text);
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setRequestProperty("Accept-Charset", Variables.UTF_8);
if (urlConnection.getResponseCode() ==200) {
//get byte array in response
in = new DataInputStream(urlConnection.getInputStream());
} else {
in = new DataInputStream(urlConnection.getErrorStream());
}
//use commons io
byte[] bytes = IOUtils.toByteArray(in);
in.close();
urlConnection.disconnect();
return bytes;
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用中文字符时,它会返回一些我无法在媒体播放器中播放的内容(我怀疑它不是一个合适的音频文件,因为绝大多数字节都是'85').所以我试过了两个
String chText = "??";
URL url = new URL(AUDIO_CHINESE + URLEncoder.encode(chText, "UTF-8)); …
Run Code Online (Sandbox Code Playgroud) 我使用URLCodec
的Apache的百科全书编解码器编码的网址,但其编码空间,+
还不如%20
为什么?什么是解决方案?
我正在尝试通过 Apache REST 客户端从 java 发送 GET 请求并遇到了这个问题。
java.net.URISyntaxException:索引 75 处的路径中存在非法字符:http : //torrento.sharepoint.com/_api/web/getfolderbyserverrelativeurl ('/Shared Documents/test')/java.net.URI$Parser.fail 中的文件(URI.java:2848) 在 java.net.URI$Parser.checkChars(URI.java:3021) 在 java.net.URI$Parser.parseHierarchical(URI.java:3105) 在 java.net.URI$Parser。 parse(URI.java:3053) at java.net.URI.(URI.java:588) at org.apache.http.client.utils.URIBuilder.(URIBuilder.java:82) at com.mstack.samples.sharepoint .SharepointApp.getAllFiles(SharepointApp.java:61) 在 com.mstack.samples.sharepoint.SharepointApp.main(SharepointApp.java:45)
代码片段:-
httpClient = HttpClientBuilder.create().build();
uriBuilder = new URIBuilder(requestUrl);
System.out.println(uriBuilder);
httpGet = new HttpGet(uriBuilder.build());
httpGet.addHeader(AUTHORIZATION, "Bearer " + TOKEN);
httpGet.addHeader("accept", "application/json; odata=verbose");
response = httpClient.execute(httpGet);
Run Code Online (Sandbox Code Playgroud)
requestUrl 在哪里 http://torrento.sharepoint.com/_api/web/getfolderbyserverrelativeurl('/Shared Documents/test')/files
我知道共享和文档之间的空间是问题所在。试图对其进行编码。但这也不起作用。请帮忙
我正在使用 java.net.URL.getPort() 从 URL 中提取端口号。大多数时候这效果很好。但是,当 URL 包含右括号字符“]”时,它将失败:
new URL("http://abc.com:123/abc.mp3").getPort();
returns: (int) 123
Run Code Online (Sandbox Code Playgroud)
但如果 URL 包含“]”我得到:
new URL("http://abc.com:123/abc].mp3").getPort();
returns: (int) -1
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
编辑#1:作为测试,我将相同的代码粘贴到非 Android Java 应用程序中,并且端口号已正确返回,因此这似乎是 Android SDK 的异常情况。
我想知道如何转换URI:
%D1%80%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9%20%D1%8F%D0%B7%D1%8B%D0%BA
Run Code Online (Sandbox Code Playgroud)
至
??????? ????
Run Code Online (Sandbox Code Playgroud)
我知道urldecode
PHP中的函数.我在Java(Android)中寻找相同的功能.有人能帮助我吗?谢谢.
这是我的代码:
HttpClient client = new DefaultHttpClient();
client.getParams().setParameter(CoreProtocolPNames.USER_AGENT, "android");
HttpGet request = new HttpGet();
request.setHeader("Content-Type", "text/plain; charset=utf-8");
Log.d("URL", convertURL(URL));
request.setURI(new URI(URL));
HttpResponse response = client.execute(request);
bufferedReader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
StringBuffer stringBuffer = new StringBuffer("");
String line = "";
String NL = System.getProperty("line.separator");
Run Code Online (Sandbox Code Playgroud)
我不知道我的网址中有哪个错误:
http://localhost/CyborgService/chatservice.php?action=recive_game&nick_sender=mkdarkness&pass=MV030595&date_last=2012-11-18 09:46:37&id_game=1
我已经使用了一个函数来转换URL,但是没有用.但是,如果我在浏览器中尝试打开此URL,则会成功打开.
这是我的错误:
Run Code Online (Sandbox Code Playgroud)11-18 21:46:37.766: E/GetHttp(823): java.net.URISyntaxException: Illegal character in query at index 127: http://192.168.0.182/CyborgService/chatservice.php?action=recive_game&nick_sender=mkdarkness&pass=MV030595&date_last=2012-11-18 09:46:37&id_game=1
我正在尝试用不同的值替换几个不同的字符.例如,如果我有:#love hate
那么我想做的就是回来%23love%20hate
这与团体有关吗?我试图理解使用组,但我真的不理解它.
如何从我的网址中删除"ö"等非英文字符,因为它会导致404响应错误.我正在使用Java.请帮我.
java ×11
url ×5
android ×4
uri ×2
url-encoding ×2
browser ×1
encoding ×1
escaping ×1
httpclient ×1
httpservice ×1
non-english ×1
regex ×1
rest ×1
rfc2396 ×1
sharepoint ×1