有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何创建单元测试来检测是否有人使用错误的编码编辑了文件?

我正在使用Java、Spring,我希望防止消息属性文件中出现一些无效字符

一些学院使用不同的操作系统、IDE和设置。由于我们的语言是葡萄牙语,Windows的默认编码是Windows-1252(或CP-1252),因此在编辑文件时,对特殊(重音)字符(如á、ã、õ等)有一些混淆是很常见的,因为其中一些字符可能使用不同的编码并弄乱消息属性文件,如下所示:

1002 = O pedido não foi encontrado
1003 = O pedido j� est� finalizado
1004 = A situa��o do hist�rico do pedido n�o � permitida

上面的文件最初是一个UTF-8文件,但有人用Windows-1252编码编辑了该文件,添加了两个新条目(1003和1004),并在将文件作为UTF-8文件读取时在重音符号的位置创建了这个奇怪的问号

所以,我正在考虑一个单元测试来检测文件中的这个问题。我如何进行单元测试?谢谢


共 (1) 个答案

  1. # 1 楼答案

    我在@Mayamar和this answer的帮助下找到了答案

    @Test
    public void verifyInvalidCharsOnMessages() throws IOException {
        verifyInvalidChars("src/main/resources/i18n/messages.properties");
        verifyInvalidChars("src/main/resources/i18n/messages_pt_BR.properties");
    }
    
    private void verifyInvalidChars(String file) throws IOException {
        Properties p = new Properties();
        FileInputStream input = new FileInputStream(new File(file));
        p.load(new InputStreamReader(input, Charset.forName("UTF-8")));
    
        Enumeration<String> enums = (Enumeration<String>) p.propertyNames();
        while (enums.hasMoreElements()) {
            String key = enums.nextElement();
            String value = p.getProperty(key);
            if (value.indexOf('\uFFFD') > 0) {
                fail();
            }
        }
    
    }