Существует библиотека (так называемый «клон») , что делает это довольно хорошо. Он обеспечивает наиболее полное рекурсивное клонирование / копирование произвольных объектов, о которых я знаю. Он также поддерживает циклические ссылки, которые еще не покрыты другими ответами.
Вы можете найти его на npm . Его можно использовать как для браузера, так и для Node.js.
Вот пример того, как его использовать:
Установите его с помощью
npm install clone
или упакуйте его с помощью Ender .
ender build clone [...]
Вы также можете загрузить исходный код вручную.
Затем вы можете использовать его в своем исходном коде.
var clone = require('clone');
var a = { foo: { bar: 'baz' } }; // inital value of a
var b = clone(a); // clone a -> b
a.foo.bar = 'foo'; // change a
console.log(a); // { foo: { bar: 'foo' } }
console.log(b); // { foo: { bar: 'baz' } }
(Отказ от ответственности: я являюсь автором библиотеки.)
Результат, который вы видите, указывает на то, что ваша консоль ожидает, что текст будет в кодировке Windows «code page 850» - символ ü имеет код UIC + UFC в кодировке Unicode. Значение байта 0xFC отображает в кодовой странице Windows 850 как ³. Поэтому, если вы хотите, чтобы имя отображалось правильно на консоли, вам нужно распечатать его, используя кодировку «Cp850»:
PrintWriter consoleOut = new PrintWriter(new OutputStreamWriter(System.out, "Cp850"));
consoleOut.println(filename);
. Это то, что ожидает ваше «другое приложение», это другой вопрос - другое приложение будет видеть только правильное имя, если оно читает свой стандартный ввод как Cp850 тоже.
Попробуйте использовать:
PrintStream out = new PrintStream(System.out, true, "UTF-8");
out.println(test);
java theprogram > thefile.txt
, а затем откройте «thefile.txt». в wordpad.exe (not notepad!) для проверки.
– user2864740
17 February 2015 в 18:30