规范化String以在Java中创建安全URL

时间:2014-02-10 13:30:32

标签: java string url normalization

我正在用Java编写一个库,它以这种方式从文件名列表中创建URL:

final String domain = "http://www.example.com/";

String filenames[] = {"Normal text","Ich weiß nicht", "L'ho inserito tra i princìpi"};

System.out.println(domain+normalize(filenames[0]);
//Prints  "http://www.example.com/Normal_text"
System.out.println(domain+normalize(filenames[1]);
//Prints  "http://www.example.com/Ich_weib_nicht"
System.out.println(domain+normalize(filenames[2]);
//Prints  "http://www.example.com/L_ho_inserito_tra_i_principi"

存在一个Java库,它暴露了我在上面的代码中使用的方法normalize

文献:

2 个答案:

答案 0 :(得分:5)

从我之前的回答here中获取内容,您可以使用java.text.Normalizer接近标准化Java中的字符串。标准化的一个例子是;

去除口音:

String accented = "árvíztűrő tükörfúrógép";
String normalized = Normalizer.normalize(accented,  Normalizer.Form.NFD);
normalized = normalized.replaceAll("[^\\p{ASCII}]", "");

System.out.println(normalized);

给出;

arvizturo tukorfurogep

答案 1 :(得分:1)

假设您想要对字符串进行编码以使其对网址安全。在这种情况下使用URLEncoder:

final String domain = "http://www.example.com/";

String filenames[] = {"Normal text","Ich weiß nicht", "L'ho inserito tra i princìpi"};

System.out.println(domain + URLEncoder.encode(filenames[0], "UTF-8"));
System.out.println(domain + URLEncoder.encode(filenames[1], "UTF-8"));
System.out.println(domain + URLEncoder.encode(filenames[2], "UTF-8"));