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