Можно создать большой JAR, который содержит все связанные классы. Следующий отрывок муравья показывает идею:
<target name="jar">
<mkdir dir="build/jar"/>
<unjar src="lib/jython.jar" dest="${classes.dir}" />
<unjar src="lib/FOO.jar" dest="${classes.dir}" />
<unjar src="lib/BAR.jar" dest="${classes.dir}" />
<unjar src="lib/BAZ.jar" dest="${classes.dir}" />
<jar destfile="build/jar/bigjython.jar" basedir="${classes.dir}">
<manifest>
<attribute name="Main-Class" value="${main-class}"/>
</manifest>
</jar>
</target>
Попробуйте этот код:
public class MyOutputStream extends OutputStream {
private PipedOutputStream out = new PipedOutputStream();
private Reader reader;
public MyOutputStream() throws IOException {
PipedInputStream in = new PipedInputStream(out);
reader = new InputStreamReader(in, "UTF-8");
}
public void write(int i) throws IOException {
out.write(i);
}
public void write(byte[] bytes, int i, int i1) throws IOException {
out.write(bytes, i, i1);
}
public void flush() throws IOException {
if (reader.ready()) {
char[] chars = new char[1024];
int n = reader.read(chars);
// this is your text
String txt = new String(chars, 0, n);
// write to System.err in this example
System.err.print(txt);
}
}
public static void main(String[] args) throws IOException {
PrintStream out = new PrintStream(new MyOutputStream(), true, "UTF-8");
System.setOut(out);
System.out.println("café résumé voilà");
}
}
Строка в java не имеет кодировки - строки поддерживаются массивом символов, и символ всегда должен быть utf-16, пока они обрабатываются как строки и значения char.
Кодировка возникает только тогда, когда вы экспортируете или импортируете строки / символы во внешнее представление (или местоположение) или из него. Передача должна происходить с использованием последовательности байтов, представляющей строку.
Думаю, первое решение близко, но тоже совершенно запутано. Сначала вы просите Java перевести значения char в их эквивалентные значения в кодировке cp1252 («слово» для символа аналогичной формы в «языке» cp1252). Затем вы создаете строку из этой последовательности байтов, заявляя, что эта последовательность кодов cp-1252 на самом деле является последовательностью кодов utf-8 и должна быть переведена в стандартное представление в памяти (utf-16) из utf-8.
Строка никогда не бывает utf og cp1252 или чем-то подобным - это всегда символы. Только байтовые последовательности - это utf-8 или cp1252. Если вы хотите преобразовать значения char в строку utf-8, вы можете использовать
byte[] utfs = myString.getBytes("UTF-8");
На самом деле, я думаю, что проблема в другом, вероятно, в потоке печати и в том, как он печатает свой ввод. Вам следует избегать преобразования строк и символов в / из байтов, потому что это всегда является основным источником путаницы и проблем. Возможно, вам нужно переопределить все методы, чтобы захватить символьные данные перед преобразованием.
потому что это всегда главный источник путаницы и проблем. Возможно, вам нужно переопределить все методы, чтобы захватить символьные данные перед преобразованием. потому что это всегда главный источник путаницы и проблем. Возможно, вам нужно переопределить все методы, чтобы захватить символьные данные перед преобразованием.Вы должны создать PrintStream с правильным кодом: http://www.j2ee.me/j2se/1.5.0/docs/api/java/io/PrintStream.html#PrintStream (java.io.File , java.lang.String)
Не могли бы вы предоставить больше кода о том, что вы пытаетесь сделать?
Как вы правильно предполагаете, проблема, скорее всего, в: чтобы соответствовать PrintStream), чтобы преобразовать их в символы, которые вы добавляете в панель.
Я не пробовал, чтобы убедиться, что он работает, но думаю, что стоит попробовать.
чтобы соответствовать PrintStream), чтобы преобразовать их в символы, которые вы добавляете в панель.Я не пробовал, чтобы убедиться, что он работает, но думаю, что стоит попробовать.