Java 中的 HTTP 标头编码/解码
自定义 HTTP 标头被传递到 Servlet 应用程序以进行身份验证。标头值必须能够包含重音符号和其他非 ASCII 字符,因此必须采用某种编码(理想情况下为 UTF-8)。
控制身份验证环境的开发人员为我提供了这段 Java 代码:
String firstName = request.getHeader("my-custom-header");
String decodedFirstName = new String(firstName.getBytes(),"UTF-8");
但是这个代码对我来说看起来不对:它以标头值的编码为前提,而在我看来,有一种正确的方法来指定标头值的编码(我相信来自MIME)。
以下是我的问题:处理需要支持 UTF-8 编码的自定义标头值的正确方法 (tm) 是什么:
- 在导线上(接头在导线上的样子)
- 从解码的角度来看(如何使用Java Servlet API对其进行解码,我们可以假设request.getHeader()已经正确地进行了解码)
下面是一个独立于环境的代码示例,用于将标头视为 UTF-8,以防您无法更改服务:
String valueAsISO = request.getHeader("my-custom-header");
String valueAsUTF8 = new String(firstName.getBytes("ISO8859-1"),"UTF-8");