在Java中,确保I';我得到了UTF-8字符串?

在Java中,确保I';我得到了UTF-8字符串?,java,utf-8,Java,Utf 8,当在servlet中从信标系统收集查询参数时,java中确保将来自第三方站点的所有输入正确转换为可以存储在日志文件中的有效UTF-8字符串的最佳方法是什么?字符串(字节[]字节,字符集字符集)构造函数允许您指定编码字符集。字符串(字节[]字节,字符集字符集)构造函数允许您指定编码字符集。步骤1:确保包含表单的页面本身为UTF-8 第2步:检查传入请求的标题,看看它们是否为您提供了一个字符集 步骤3:不要依赖字符串(字节[])或InputStreamReader(InputStream)。始终调用

当在servlet中从信标系统收集查询参数时,java中确保将来自第三方站点的所有输入正确转换为可以存储在日志文件中的有效UTF-8字符串的最佳方法是什么?

字符串(字节[]字节,字符集字符集)构造函数允许您指定编码字符集。

字符串(字节[]字节,字符集字符集)构造函数允许您指定编码字符集。

步骤1:确保包含表单的页面本身为UTF-8

第2步:检查传入请求的标题,看看它们是否为您提供了一个字符集


步骤3:不要依赖
字符串(字节[])
InputStreamReader(InputStream)
。始终调用采用显式字符集规范的函数。

步骤1:确保包含表单的页面本身为UTF-8格式

第2步:检查传入请求的标题,看看它们是否为您提供了一个字符集


步骤3:不要依赖
字符串(字节[])
InputStreamReader(InputStream)
。始终调用采用显式字符集规范的函数。

Java字符串在内部始终为UTF-16。您真正需要注意编码的地方是当您将字节转换为字符串时,反之亦然,因为这就是编码:在字节和字符/字符串之间转换的一组规则。不是字符串的属性。在您的情况下,转换应该正好发生两次:当您从第三方站点读取时,以及当您写入日志文件时

当从第三方站点读取时,您不能只使用UTF-8,因为这些站点可以使用各种不同的编码。因此,您需要遵守它们在HTTP头、HTML元标记或XML头中声明的编码。任何一个好的HTTP客户机都会为您做到这一点,所以您只需要让它完成它的工作,而不要尝试自己做任何花哨的事情


另一方面,在写入日志文件时,应该确保使用的是UTF-8,而不是平台默认编码(即使是UTF-8,也可能会更改)。这应该在日志库的配置中完成,或者在创建
OutputStreamWriter
时,如果您编写的文件没有这样的库,那么Java字符串在内部总是UTF-16。您真正需要注意编码的地方是当您将字节转换为字符串时,反之亦然,因为这就是编码:在字节和字符/字符串之间转换的一组规则。不是字符串的属性。在您的情况下,转换应该正好发生两次:当您从第三方站点读取时,以及当您写入日志文件时

当从第三方站点读取时,您不能只使用UTF-8,因为这些站点可以使用各种不同的编码。因此,您需要遵守它们在HTTP头、HTML元标记或XML头中声明的编码。任何一个好的HTTP客户机都会为您做到这一点,所以您只需要让它完成它的工作,而不要尝试自己做任何花哨的事情


另一方面,在写入日志文件时,应该确保使用的是UTF-8,而不是平台默认编码(即使是UTF-8,也可能会更改)。这应该在日志库的配置中完成,或者如果您在创建
OutputStreamWriter

时编写的文件没有这样的库,那么本教程非常好。这个教程非常好。