当从servlet中的信标系统收集查询参数时,java中最好的方法是确保我正确地将来自第三方站点的所有输入转换为有效的UTF-8字符串,我可以将其存储在我的日志文件中?
答案 0 :(得分:4)
Java字符串内部始终为UTF-16。你真正需要注意编码的地方是你将字节转换为字符串,反之亦然,因为编码是这样的:一组在字节和字符/字符串之间转换的规则。不是字符串的属性。在您的情况下,转换应该恰好发生两次:当您从第三方站点读取时,以及当您写入日志文件时。
从第三方网站阅读时,不只能使用UTF-8,因为这些网站可以使用各种不同的编码。因此,您需要遵守它们在HTTP标头,HTML META标记或XML标头中声明的编码。任何体面的HTTP客户端都会为你做这件事,所以你只需要让它完成它的工作而不是试图做任何你喜欢的事情。
另一方面,在写入日志文件时,您应该确保使用的是UTF-8而不是平台默认编码(即使它是UTF-8,它可能会更改)。这应该在您的日志库配置中完成,或者如果您在没有这样的库的情况下编写文件,则在创建OutputStreamWriter
时。
答案 1 :(得分:1)
步骤1:确保包含表单的页面本身为UTF-8。
步骤2:检查传入请求的标题,看看它们是否为您提供了字符集。
第3步:不要依赖String(byte[])
或InputStreamReader(InputStream)
。始终调用带有明确字符集规范的函数。
答案 2 :(得分:0)
String(byte[] bytes, Charset charset)
构造函数允许您指定编码字符集。