我们通常使用的编码方式,例如UTF-8,是可以编码大部分特殊字符的,但在有些情况下,一些特殊字符是会造成程序异常的。
比如说,在CSV、XML、JSON等这些有严格格式要求的数据格式中,特殊字符就需要特殊处理。
下面就介绍几个处理这些特殊字符的几个方法。
URI
统一资源标识符(Uniform Resource Identifier,或URI)是一个用于标识某一互联网资源名称的字符串,URI一般由三部分组成:主机名、标志符、相对URI。
URL(统一资源定位符)是Uniform Resource Locator的缩写,是URI的一个子集。
对于URI中的特殊字符,一般会转为US-ASCII编码。
例如浏览器地址栏输入如下链接:http://test.com/【u r i 中 文】/, 一般会转为:http://test.com/%E3%80%90u%20r%20i%20%E4%B8%AD%20%E6%96%87%E3%80%91/
那么如何实现把【u r i 中 文】转为%E3%80%90u%20r%20i%20%E4%B8%AD%20%E6%96%87%E3%80%91呢?
http://java.net包下的URI就有一个toASCIIString()可以使用。
下面这个工具方法就能实现上面的转码动作。
/***
* 将Hppt请求的URI的 Path内容部分(不包含protocol和host以及/) 转码为 ASCII String*
**
* exampe:
* URIUtils.pathContentToASCIIString("g h 【 中文 】");
* 返回:
* g%20h%20%E3%80%90%20%E4%B8%AD%E6%96%87%20%E3%80%91
*
public static String pathContentToASCIIString(String uriPath) throws URISyntaxException {
//构造一个URI对象,其中host是随机字符串 String scheme = "https";
String host = "vadvdavddfmadlovbnsdaye.adfmadddcsefgrfcvg.ppamsasaaaff";
String path = "/" + uriPath;
URI uri = new URI(scheme, host, path, null);
//需要替换掉的URI头 String regex = scheme + "://" + host + "/";
//将URI转为 US-ASCII string,然后替换掉头部返回 return uri.toASCIIString().replaceFirst(regex, "");
}
CSV XML JOSN HTML JAVA
对于将字符串转为CSV、XML、JOSN、HTML、JAVA等格式合法的字符,可以使用Apache Commons Text或者Googel Guava的工具类实现。
首先你需要配置你的Maven坐标,添加Commons Text的依赖。
org.apache.commons
commons-text
1.6
然后就可以使用StringEscapeUtils.escapeHtml4 将