今天我的一位测试人员来找我,说我的计划未通过测试。
她所做的只是打开我的所有属性文件并将其保存为Unicode格式。
问题:
我以前从未见过任何运行编码检查的java项目。但我明白了她的观点,因为客户可能会以不同的编码类型保存属性文件。
答案 0 :(得分:3)
属性文件是应用程序的一部分还是用户可编辑文件的一部分。在第一种情况下,我认为对应用程序的某些部分进行编码或存储的假设并不是错误的。
如果属性文件以用户可编辑文件为目标,那么原则适用:您应该验证并清除从应用程序外部输入的所有输入。
官方java.util.Properties
文档指出编码位于ISO-8859-1
。
将属性保存到流或从流中加载时,ISO 8859-1字符 使用编码。对于无法在此编码中直接表示的字符, 使用Unicode转义;但是,逃跑时只允许一个“u”字符 序列。 native2ascii工具可用于将属性文件转换为其他文件 字符编码。
这可以是found here。
答案 1 :(得分:0)
即使规范允许在属性文件中使用Latin-1,但通常的做法是ASCII。
所有其他字符集需要使用native2ascii
转换为ASCII才能安全。
当我们开始使用本机编码时遇到了同样的问题,一些是在Latin-1中,另一些是在UTF-8中,并且它们不兼容。所以请保持ASCII。
答案 2 :(得分:0)
正如其他人所说,使用流读取的属性文件的编码固定为ISO-8859-1。你无法真正轻松地验证这一点 - 虽然检查文件是否以UTF-8字节顺序标记开头并不是一个坏主意。
从Java 6开始,您可以向Properties.load而不是Reader
提供Stream
。如果它仍然是一个选项,你可能想要开始使用它和授权 UTF-8,这对许多人来说比使用要容易得多ISO-8859-1和\uxxxx
转义。
答案 3 :(得分:0)
使用native2ascii java实用程序使您的属性文件处于正确状态。