Ок, я написал свой собственный конвертер, используя немного кода от Алекса.
public static void main(String[] args) throws IOException {
Scanner fileScanner =
new Scanner(new FileInputStream(args[0]), "utf-16");
Writer writer =
new BufferedWriter(new OutputStreamWriter(new FileOutputStream(
new File(args[1])), "UTF8"));
writer.append("<?xml version=\"1.0\" encoding=\"utf-8\"?> <resources>");
while (fileScanner.hasNextLine()) {
String line = fileScanner.nextLine();
if (line.contains("=")) {
line = line.trim();
line = line.replace("\"", "");
line = line.replace(";", "");
String[] parts = line.split("=");
String nextLine =
"<string name=\"" + parts[0].trim() + "\">"
+ parts[1].trim() + "</string>";
System.out.println(nextLine);
writer.append(nextLine);
}
}
fileScanner.close();
writer.append("</resources>");
writer.close();
}
Было немного сложно заставить Java правильно читать и записывать UTF 16, который я получил из проекта xcode, но теперь он работает как шарм.
Это одна из тех областей, где могут пригодиться образ мышления и инструментарий Unix. Я не знаю, на что похож формат iPhone, но если это то, что вы говорите, с каждым значением по одному в строке, простой вызов sed
может сделать это:
$ cat infile
"key"="value"
"key2"="value2"
$ sed 's/ *"\([^"]*\)" *= *"\([^"]*\)"/<string name="\1">\2<\/string>/' infile
<string name="key">value</string>
<string name="key2">value2</string>
$
Я ожидаю, что sed доступен на вашем OSX установить.
«Инструмент», который я использовал для преобразования файла свойств Java:
BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream("c:/messages_en.properties"), "utf-8"));
String line = null;
while ((line = br.readLine()) != null) {
line = line.trim();
if (line.length() > 0) {
String[] parts = line.split(" = ");
System.out.println("<string name=\"" + parts[0] + "\">"
+ parts[1] + "</string>");
}
}
br.close();