asp.net core 2.0
请求地址中包含中文,例如:http://www.example.com/tag/中文 就会报错:
Invalid non-ASCII or control character in header
因为chrome浏览器默认编码为http://www.example.com/tag/%E4%B8%AD%E6%96%87
那么,在不改变客户端的情况下,如何让服务器接受这些non-ASCII的URL地址呢?
问题不是服务端无法接受带有non-ASCII字符集的请求,而是转发的时候出问题了。
你可以处理一下URL,把中文转义后传到后台相对应的的在返转义,有这么个方法你百度一下就能收到,比如 空格 转义为 20%
URL中的字符只能是ASCII字符,但是ASCII字符比较少,而URL则常常包含ASCII字符集以外的字符,如非英语字符、汉字、特殊符号等等,所以要对URL进行转换。这个过程就叫做URL编码,或者叫URL转义,实质上就是将包含非ASCII字符的URL转换为有效的ASCII字符格式。
在进行URL编码时,每一个非ASCII字符都被替换为“%hh”格式,其中hh为两位十六进制数,它对应于该字符在ISO-8859-1字符集里的编码值。比如“中国”这两个汉字出现在URL,就要将他们转为“%D6%D0%B9%FA”,由于一个汉字需要两个字节,所以“中国”被替换成了四个ASCII字符。
public static void main(String[] args) throws UnsupportedEncodingException{ String s = "zhaoxiaofnag%40eims.com.cn "; s=URLDecoder.decode(s,"utf-8"); System.out.println(s); String china = "%31%32%36%2E%61%6D/hEeGv4"; china = URLDecoder.decode(china,"utf-8"); System.out.println(china); }
博问中是正常的 https://q.cnblogs.com/tag/%E4%B8%AD%E6%96%87
Invalid non-ASCII or control character in header
,是指请求头,不是指请求URL