java - Replacing URL Character Encodings in Java
问题描述
I am trying to replace character encodings in URL's to no avail, I have scouted around the internet but have only found outdated libraries and answers.
import java.io.*;
import java.util.*;
public class Chapter6 {
public static void main(String[] args) throws FileNotFoundException{
Scanner input = new Scanner(new File("BCwebSiteHTML.txt"));
System.out.println("Total Count: " + countHref(input));
}
public static int countHref(Scanner s) {
int count = 0;
while(s.hasNext()) {
String token = s.next();
if(token.contains("href=\"")) {
count++;
token = fixHTML(token);
System.out.println(token.substring(6, token.length() - 1));
}
}
return count;
}
public static String fixHTML(String data) {
data = data.replace("%20", " ");
data = data.replace("%21", "!");
data = data.replace("%22", "\"");
data = data.replace("%23", "#");
data = data.replace("%24", "$");
data = data.replace("%25", "%");
data = data.replace("%26", "&");
data = data.replace("%27", "\'");
data = data.replace("%28", "(");
data = data.replace("%29", ")");
data = data.replace("%2A", "*");
data = data.replace("%2B", "+");
data = data.replace("%2C", ",");
data = data.replace("%2D", "-");
data = data.replace("%2E", ".");
data = data.replace("%2F", "/");
data = data.replace("%30", "0");
data = data.replace("%31", "1");
data = data.replace("%32", "2");
data = data.replace("%33", "3");
data = data.replace("%34", "4");
data = data.replace("%35", "5");
data = data.replace("%36", "6");
data = data.replace("%37", "7");
data = data.replace("%38", "8");
data = data.replace("%39", "9");
data = data.replace("%3A", ":");
data = data.replace("%3B", ";");
data = data.replace("%3C", "<");
data = data.replace("%3D", "=");
data = data.replace("%3E", ">");
data = data.replace("%3F", "?");
data = data.replace("%40", "@");
data = data.replace("%41", "A");
data = data.replace("%42", "B");
data = data.replace("%43", "C");
data = data.replace("%44", "D");
data = data.replace("%45", "E");
data = data.replace("%46", "F");
data = data.replace("%47", "G");
data = data.replace("%48", "H");
data = data.replace("%49", "I");
data = data.replace("%4A", "J");
data = data.replace("%4B", "K");
data = data.replace("%4C", "L");
data = data.replace("%4D", "M");
data = data.replace("%4E", "N");
data = data.replace("%4F", "O");
data = data.replace("%50", "P");
data = data.replace("%51", "Q");
data = data.replace("%52", "R");
data = data.replace("%53", "S");
data = data.replace("%54", "T");
data = data.replace("%55", "U");
data = data.replace("%56", "V");
data = data.replace("%57", "W");
data = data.replace("%58", "X");
data = data.replace("%59", "Y");
data = data.replace("%5A", "Z");
data = data.replace("%5B", "[");
data = data.replace("%5C", "\\");
data = data.replace("%5D", "]");
data = data.replace("%5E", "^");
data = data.replace("%5F", "_");
data = data.replace("%60", "`");
data = data.replace("%61", "a");
data = data.replace("%62", "b");
data = data.replace("%63", "c");
data = data.replace("%64", "d");
data = data.replace("%65", "e");
data = data.replace("%66", "f");
data = data.replace("%67", "g");
data = data.replace("%68", "h");
data = data.replace("%69", "i");
data = data.replace("%6A", "j");
data = data.replace("%6B", "k");
data = data.replace("%6C", "l");
data = data.replace("%6D", "m");
data = data.replace("%6E", "n");
data = data.replace("%6F", "o");
data = data.replace("%70", "p");
data = data.replace("%71", "q");
data = data.replace("%72", "r");
data = data.replace("%73", "s");
data = data.replace("%74", "t");
data = data.replace("%75", "u");
data = data.replace("%76", "v");
data = data.replace("%77", "w");
data = data.replace("%78", "x");
data = data.replace("%79", "y");
data = data.replace("%7A", "z");
data = data.replace("%7B", "{");
data = data.replace("%7C", "|");
data = data.replace("%7D", "}");
data = data.replace("%7E", "~");
data = data.replace("%80", "`");
return data;
}
}
For example, https://fonts.googleapis.com/css?family=Noto+Serif%3A400%2C400i%2C700%2C700i&ver=5.3.4 would become https://fonts.googleapis.com/css?family=Noto+Serif:400,400i,700,700i&ver=5.3.4
The code shown above works, but there must be a more concise way of doing this, right? That's the question
解决方案
实际上,您可以使用 java.net.URLDecoder
data = URLDecoder.decode(data);
推荐阅读
- java - Netty Http Client:如何将客户端启动、发送请求和客户端关闭分成不同的方法
- c# - 发布请求时未填写 ASP.NET Web API 对象参数
- excel - SUMIFS 函数返回的值与过滤和使用 SUBTOTAL 不同
- python-3.x - 使用 opencv 加载数据集并将其存储在另一个文件中
- vba - 如何:附加 .pdf 并发送电子邮件,无需用户输入
- excel - 如何防止 Excel 自动将自动换行应用于单元格
- angular - 从 Http 更新到 HttpClient 后 Angular 6 提供程序注入错误
- sql - 查询时将多个日期字段合二为一
- svg - 如何修复vuejs中svg的getTotalLength()的结果时间?
- http - 用户存在时服务器返回 400