在读取属性文件时是否需要检查编码方案?

时间:2009-09-23 03:59:36

标签: java encoding properties

今天我的一位测试人员来找我,说我的计划未通过测试。

她所做的只是打开我的所有属性文件并将其保存为Unicode格式。

问题:

  1. 是否有行业惯例来检查每个属性文件的编码类型?
  2. 你如何处理这个问题?
  3. 我以前从未见过任何运行编码检查的java项目。但我明白了她的观点,因为客户可能会以不同的编码类型保存属性文件。

4 个答案:

答案 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实用程序使您的属性文件处于正确状态。