属性文件中的特殊字符问题

问题描述 投票:0回答:2

我有翻译的属性文件。一份文件是英文的,另一份是瑞典文的。对于每个我想要翻译的页面,我都有单独的属性文件,例如home.properties、home_en.properties、help.properties、help_en.properties。我也有源代码管理 (github) 下的文件。

当我打开某个文件时,我得到的文本格式很奇怪,例如:

lbl_draftsMan=Föredragande
lbl_draftsManEpost=Epost föredragande

英文文件的替代文本是:

lbl_draftsMan=Presenter
lbl_draftsManEpost=Email presenter

我在 Github 上注意到,瑞典文件中的文本在那里是正常的:

lbl_draftsMan=Föredragande
lbl_draftsManEpost=Epost föredragande

我有以下文件属性:

Field Name: $MimeCharSet
Data Type: Text
Data Length: 5 bytes
Seq Num: 5
Dup Item ID: 0
Field Flags: SIGN SUMMARY 

"UTF-8"

其他的properties文件也是一样的设置但是我没有编码字符的问题

这是什么原因?我认为 Domino Designer 是问题的根源?

utf-8 xpages properties-file
2个回答
0
投票

我们的德国财产文件也有类似的问题。虽然我们的设置是 UTF-8,但变音符号显示不正确。只有当我们以 UTF-8 编码输入变音符号时,变音符号才能正确显示(例如 ö --> \u00f6)


0
投票

属性文件不是UTF-8,你需要对你的内容进行编码。最简单的方法是一个小型独立 Java 应用程序读取 UTF-8 源代码并使用 Properties 类写出。它负责编码

更新:

import java.io.FileWriter;
import java.io.Writer;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.util.Properties;
import java.util.Scanner;

/*
 * Demo of handling UTF-8 properties
 */

public class Umlaut {
    public static void main(String[] args) throws Exception {
        Umlaut u = new Umlaut();
        u.run("source.txt", "target.properties");
    }

    void run(String sourceFileName, String targetFileName) throws Exception {
        try (Writer writer = new FileWriter(targetFileName, StandardCharsets.ISO_8859_1);
                Scanner scanner = new Scanner(Path.of(sourceFileName), StandardCharsets.UTF_8)) {
            Properties properties = new Properties();
            while (scanner.hasNextLine()) {
                String line = scanner.nextLine();
                String[] splits = line.split("=");
                properties.setProperty(splits[0], escape(splits[1]));
            }

            properties.store(writer, "Transformed");
        }
    }

    String escape(String source) {
        final StringBuilder b = new StringBuilder();
        for (int i = 0; i < source.length(); i++) {
            char c = source.charAt(i);
            convert(c, b);
        }
        return b.toString();
    }

    void convert(char source, StringBuilder b) {
        if (source <= 0x7E) {
            b.append(source);
            return;
        }
        b.append("\\u");
        String hex = "0000" + Integer.toHexString(source);
        b.append(hex.substring(hex.length() - 4));

    }
}

© www.soinside.com 2019 - 2024. All rights reserved.