我有翻译的属性文件。一份文件是英文的,另一份是瑞典文的。对于每个我想要翻译的页面,我都有单独的属性文件,例如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,但变音符号显示不正确。只有当我们以 UTF-8 编码输入变音符号时,变音符号才能正确显示(例如 ö --> \u00f6)
属性文件不是UTF-8,你需要对你的内容进行编码。最简单的方法是一个小型独立 Java 应用程序读取 UTF-8 源代码并使用 Properties 类写出。它负责编码
更新:
有一个命令行实用程序:https://docs.oracle.com/javase/8/docs/technotes/tools/windows/native2ascii.html
在 Eclipse 中保存也应该这样做
如果您想编写自己的代码,请以此为起点(您想要删除硬编码的文件名)。甚至应该适用于表情符号。
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));
}
}