Включенный в ASP.NET 3,5 SP1:
Канальный символ «считается небезопасным» для использования в URL-адресах. Вы можете исправить это, заменив | с его закодированным шестнадцатеричным эквивалентом, который будет "% 7C"
. Однако замена отдельных символов в URL-адресе - хрупкое решение, которое не работает очень хорошо, если учесть, что в любом заданном URL-адресе потенциально может быть довольно много количество разных символов, которые, возможно, потребуется заменить. Вы уже заменяете пробелы, символы вставки и вертикальные линии .... но как насчет скобок, знаков ударения и кавычек? Или вопросительные знаки и амперсанды, которые могут быть или не быть действительными частями URL-адреса, в зависимости от того, как они используются?
Таким образом, лучшим решением было бы использовать средства языка для кодирования URL-адресов, а не делать это вручную. В случае Java используйте URLEncoder ,
Не лучше ли использовать URLEncoder , чем выборочно кодировать что-то?
Вы должны использовать java.net.URLEncoder
для URL-кодирования запроса с помощью UTF-8
. Для этого не обязательно использовать регулярное выражение. Вы же не хотите, чтобы регулярное выражение покрывало все эти тысячи китайских символов, не так ли? ;)
String query = URLEncoder.encode("zh-CN|en|你", "UTF-8");
String url = "http://translate.google.com/#" + query;
Desktop.getDesktop().browse(new URI(url));
Хорошо, я нашел, как это сделать, вот так:
try { Desktop.getDesktop().browse(new URI(File_Or_Url.replace(" ","%20").replace("^","%5E").replace("|","%7C"))); }
catch (Exception e) { e.printStackTrace(); }