powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как заставить яву выдавать сообщения об ошибках только на английском языке ?
12 сообщений из 12, страница 1 из 1
Как заставить яву выдавать сообщения об ошибках только на английском языке ?
    #38285623
ozzmosis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет.

Сабж.
Например, вот:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
import java.util.*;
import java.io.File;
import java.io.IOException;
public class DirFileMaker {
    public static void main(String[] args) {
        Locale bLocale = new Locale("en", "US");
        try {
          // пытаемся создать каталог внутри НЕ существующего каталога
          File dir = new File("C:\\SOME_NON_EXISTING_FOLDER\\aaa\\bbb"); 
          dir.mkdir();
          File fx = new File(dir, "javafile.test");
          fx.createNewFile();
        } catch(IOException x) {
            x.printStackTrace();
        }
    }
} 


- выдаёт строку "Системе не удается найти указанный путь", которая в консольном окне с кодировкой 866 представлена в виде кракозябр. Чтобы её прочитать, надо сначала ввести chcp 1251. Но этот способ работает почему-то не на всех машинах.

Например, на одной тачке она выводится при любой кодировке в нечитабельном виде (см аттач).

Мне фиолетово, что там за установки на этой машине - я просто хочу прочесть мессагу на чистом инглише.
Как это сделать ?

PS. Извиняйте, если баян. Не смог найти вменяемого ответа ни в туториале , ни на stackoverflow et al.
...
Рейтинг: 0 / 0
Как заставить яву выдавать сообщения об ошибках только на английском языке ?
    #38285624
ozzmosis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PS. приаттаченный скриншот слетел :/
вот он:
...
Рейтинг: 0 / 0
Как заставить яву выдавать сообщения об ошибках только на английском языке ?
    #38285628
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Этот текст сформирован операционной системой. К Java отношения не имеет.
...
Рейтинг: 0 / 0
Как заставить яву выдавать сообщения об ошибках только на английском языке ?
    #38285634
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сообщение об ошибке выдаёт операционная система, поэтому, таки, chcp и юникодный шрифт консоли.

P.S.
Код: sql
1.
2.
3.
4.
5.
6.
7.
@echo off
setlocal
for /f "tokens=2 delims=:" %%A in ('chcp') do for %%B in (%%A) set _codepage=%%B
chcp 1251
...
chcp %_codepage% >nul
endlocal
...
Рейтинг: 0 / 0
Как заставить яву выдавать сообщения об ошибках только на английском языке ?
    #38285635
ozzmosis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

правильно ли понимаю, что текст от операционки идёт в эксепшенах типа IOException, т.е. в таких случаях, когда что-то "не то" случается именно на уровне операционки, а не самой явы ?
...
Рейтинг: 0 / 0
Как заставить яву выдавать сообщения об ошибках только на английском языке ?
    #38285638
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ozzmosisправильно ли понимаю, что текст от операционки идёт в эксепшенах типа IOException, т.е. в таких случаях, когда что-то "не то" случается именно на уровне операционки, а не самой явы ?
Да.
...
Рейтинг: 0 / 0
Как заставить яву выдавать сообщения об ошибках только на английском языке ?
    #38285639
ozzmosis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov,

дык на той машине обычная винда стоит, нет там юникодной консоли.
...
Рейтинг: 0 / 0
Как заставить яву выдавать сообщения об ошибках только на английском языке ?
    #38285641
ozzmosis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЗЫ. да и вообще не понятно, почему на одной тачке сообщение читабельно, а на другой - с той же виндой! - нет.
...
Рейтинг: 0 / 0
Как заставить яву выдавать сообщения об ошибках только на английском языке ?
    #38285643
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ozzmosisдык на той машине обычная винда стоит, нет там юникодной консоли."юникодный шрифт" <> "юникодная консоль".

P.S. Консоль винды юникодная, но crt - несколько глючный :)
...
Рейтинг: 0 / 0
Как заставить яву выдавать сообщения об ошибках только на английском языке ?
    #38285648
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ozzmosis,

Можно попробовать пересоздать System.out с новым Writer и явным указанием cp866 в нем.
http://www.sql.ru/forum/201915/russkie-bukvy
...
Рейтинг: 0 / 0
Как заставить яву выдавать сообщения об ошибках только на английском языке ?
    #38285693
ozzmosis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczМожно попробовать пересоздать System.out с новым Writer и явным указанием cp866 в нем.
http://www.sql.ru/forum/201915/russkie-bukvy Помогло, спасибо. На "проблемной" машине сообщение теперь выводится по-русски, если юзать класс Астахова:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
import java.util.*;
import java.io.*;
public class DirFileMaker {
    public static void main(String[] args) {
        //Locale bLocale = new Locale("en", "US");
   try
     {
      String cp = "Cp866";
      System.setOut(new CodepagePrintStream(System.out,System.getProperty("console.encoding", cp)) );
     }
   catch(UnsupportedEncodingException e)
     {
      e.printStackTrace();
     }
        try {
          File dir = new File("C:\\SOME_NON_EXISTING_FOLDER\\aaa\\bbb");
          dir.mkdir();
          File fx = new File(dir, "javafile.test");
          fx.createNewFile();
        } 
        catch(IOException x) {
           //x.printStackTrace();
           x.printStackTrace(System.out);
         }
    }
}


CodepagePrintStream без Msg:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
381.
382.
383.
384.
385.
386.
387.
388.
389.
390.
391.
392.
393.
394.
395.
396.
397.
398.
399.
400.
401.
402.
403.
404.
405.
406.
407.
408.
409.
410.
411.
412.
413.
414.
415.
416.
417.
418.
419.
420.
421.
422.
423.
424.
425.
426.
427.
428.
429.
430.
431.
432.
433.
434.
435.
436.
437.
438.
439.
440.
441.
442.
443.
444.
445.
446.
447.
448.
449.
450.
451.
452.
453.
454.
455.
456.
457.
458.
459.
460.
461.
462.
463.
464.
465.
466.
467.
468.
469.
470.
471.
472.
473.
474.
475.
476.
477.
478.
479.
480.
481.
482.
483.
484.
485.
486.
487.
488.
489.
490.
491.
492.
493.
494.
495.
496.
497.
498.
499.
500.
501.
502.
503.
504.
505.
506.
507.
/**
* CodepagePrintStream.java
*
* Copyright (C) 1998-2000 COMITA Ltd. All Rights Reserved.
*/
import java.io.*;

/**
* Класс реализует методы PrintStream с возможностью работы в нужной кодировке.
*
* Обычно используется для замены стандартных System.out и System.err:
* <pre>
*  public static void main(String[] args)
*  {
*   // Установка вывода консольных сообщений в нужной кодировке
*   try
*     {
*      System.setOut(new CodepagePrintStream(System.out,System.getProperty("console.encoding","Cp866")) );
*     }
*   catch(UnsupportedEncodingException e)
*     {
*      Msg.message(Msg.ALERT,"Unable to setup console codepage: " + e);
*      Msg.printStackTrace(Msg.ALERT,e);
*     }
* </pre>
*
* @author Sergey Astakhov
* @version 1.01, 24.07.2000
*/
public class CodepagePrintStream extends PrintStream
{
 public CodepagePrintStream(OutputStream os,String cp) throws UnsupportedEncodingException
 {
  super(os);

  this.autoFlush = false;
  this.charOut = new OutputStreamWriter(this,cp);
  this.textOut = new BufferedWriter(this.charOut);
 }

 private boolean autoFlush = false;
 private boolean trouble = false;

 /**
  * Track both the text- and character-output streams, so that their buffers
  * can be flushed without flushing the entire stream.
  */
 private BufferedWriter textOut;
 private OutputStreamWriter charOut;

    /** Check to make sure that the stream has not been closed */
    private void ensureOpen() throws IOException {
	if (out == null)
	    throw new IOException("Stream closed");
    }

    /**
     * Flush the stream.  This is done by writing any buffered output bytes to
     * the underlying output stream and then flushing that stream.
     *
     * @see        java.io.OutputStream#flush()
     */
    public void flush() {
	synchronized (this) {
	    try {
		ensureOpen();
		out.flush();
	    }
	    catch (IOException x) {
		trouble = true;
	    }
	}
    }

    private boolean closing = false; /* To avoid recursive closing */

    /**
     * Close the stream.  This is done by flushing the stream and then closing
     * the underlying output stream.
     *
     * @see        java.io.OutputStream#close()
     */
    public void close() {
	synchronized (this) {
	    if (! closing) {
		closing = true;
		try {
		    textOut.close();
		    out.close();
		}
		catch (IOException x) {
		    trouble = true;
		}
		textOut = null;
		charOut = null;
		out = null;
	    }
	}
    }

    /**
     * Flush the stream and check its error state.  The internal error state
     * is set to <code>true</code> when the underlying output stream throws an
     * <code>IOException</code> other than <code>InterruptedIOException</code>,
     * and when the <code>setError</code> method is invoked.  If an operation
     * on the underlying output stream throws an
     * <code>InterruptedIOException</code>, then the <code>PrintStream</code>
     * converts the exception back into an interrupt by doing:
     * <pre>
     *     Thread.currentThread().interrupt();
     * </pre>
     * or the equivalent.
     *
     * @return True if and only if this stream has encountered an
     *         <code>IOException</code> other than
     *         <code>InterruptedIOException</code>, or the
     *         <code>setError</code> method has been invoked
     */
    public boolean checkError() {
	if (out != null)
	    flush();
	return trouble;
    }

    /**
     * Set the error state of the stream to <code>true</code>.
     *
     * @since JDK1.1
     */
    protected void setError() {
	trouble = true;
    }


    /*
     * Exception-catching, synchronized output operations,
     * which also implement the write() methods of OutputStream
     */

    /**
     * Write the specified byte to this stream.  If the byte is a newline and
     * automatic flushing is enabled then the <code>flush</code> method will be
     * invoked.
     *
     * <p> Note that the byte is written as given; to write a character that
     * will be translated according to the platform's default character
     * encoding, use the <code>print(char)</code> or <code>println(char)</code>
     * methods.
     *
     * @param  b  The byte to be written
     * @see #print(char)
     * @see #println(char)
     */
    public void write(int b) {
	try {
	    synchronized (this) {
		ensureOpen();
		out.write(b);
		if ((b == '\n') && autoFlush)
		    out.flush();
	    }
	}
	catch (InterruptedIOException x) {
	    Thread.currentThread().interrupt();
	}
	catch (IOException x) {
	    trouble = true;
	}
    }

    /**
     * Write <code>len</code> bytes from the specified byte array starting at
     * offset <code>off</code> to this stream.  If automatic flushing is
     * enabled then the <code>flush</code> method will be invoked.
     *
     * <p> Note that the bytes will be written as given; to write characters
     * that will be translated according to the platform's default character
     * encoding, use the <code>print(char)</code> or <code>println(char)</code>
     * methods.
     *
     * @param  buf   A byte array
     * @param  off   Offset from which to start taking bytes
     * @param  len   Number of bytes to write
     */
    public void write(byte buf[], int off, int len) {
	try {
	    synchronized (this) {
		ensureOpen();
		out.write(buf, off, len);
		if (autoFlush)
		    out.flush();
	    }
	}
	catch (InterruptedIOException x) {
	    Thread.currentThread().interrupt();
	}
	catch (IOException x) {
	    trouble = true;
	}
    }

    /*
     * The following private methods on the text- and character-output streams
     * always flush the stream buffers, so that writes to the underlying byte
     * stream occur as promptly as with the original PrintStream.
     */

    private void write(char buf[]) {
	try {
	    synchronized (this) {
		ensureOpen();
		textOut.write(buf);
		textOut.flush();
		charOut.flush();
		if (autoFlush) {
		    for (int i = 0; i < buf.length; i++)
			if (buf[i] == '\n')
			    out.flush();
		}
	    }
	}
	catch (InterruptedIOException x) {
	    Thread.currentThread().interrupt();
	}
	catch (IOException x) {
	    trouble = true;
	}
    }

    private void write(String s) {
	try {
	    synchronized (this) {
		ensureOpen();
		textOut.write(s);
		textOut.flush();
		charOut.flush();
		if (autoFlush && (s.indexOf('\n') >= 0))
		    out.flush();
	    }
	}
	catch (InterruptedIOException x) {
	    Thread.currentThread().interrupt();
	}
	catch (IOException x) {
	    trouble = true;
	}
    }

    private void newLine() {
	try {
	    synchronized (this) {
		ensureOpen();
		textOut.newLine();
		textOut.flush();
		charOut.flush();
		if (autoFlush)
		    out.flush();
	    }
	}
	catch (InterruptedIOException x) {
	    Thread.currentThread().interrupt();
	}
	catch (IOException x) {
	    trouble = true;
	}
    }


    /* Methods that do not terminate lines */

    /**
     * Print a boolean value.  The string produced by <code>{@link
     * java.lang.String#valueOf(boolean)} is translated into bytes according to
     * the platform's default character encoding, and these bytes are written
     * in exactly the manner of the <code>{@link #write(int)} method.
     *
     * @param      b   The <code>boolean</code> to be printed
     */
    public void print(boolean b) {
	write(b ? "true" : "false");
    }

    /**
     * Print a character.  The character is translated into one or more bytes
     * according to the platform's default character encoding, and these bytes
     * are written in exactly the manner of the <code>{@link #write(int)}
     * method.
     *
     * @param      c   The <code>char</code> to be printed
     */
    public void print(char c) {
	write(String.valueOf(c));
    }

    /**
     * Print an integer.  The string produced by <code>{@link
     * java.lang.String#valueOf(int)} is translated into bytes according to the
     * platform's default character encoding, and these bytes are written in
     * exactly the manner of the <code>{@link #write(int)} method.
     *
     * @param      i   The <code>int</code> to be printed
     */
    public void print(int i) {
	write(String.valueOf(i));
    }

    /**
     * Print a long integer.  The string produced by <code>{@link
     * java.lang.String#valueOf(long)} is translated into bytes according to
     * the platform's default character encoding, and these bytes are written
     * in exactly the manner of the <code>{@link #write(int)} method.
     *
     * @param      l   The <code>long</code> to be printed
     */
    public void print(long l) {
	write(String.valueOf(l));
    }

    /**
     * Print a floating-point number.  The string produced by <code>{@link
     * java.lang.String#valueOf(float)} is translated into bytes according to
     * the platform's default character encoding, and these bytes are written
     * in exactly the manner of the <code>{@link #write(int)} method.
     *
     * @param      f   The <code>float</code> to be printed
     */
    public void print(float f) {
	write(String.valueOf(f));
    }

    /**
     * Print a double-precision floating-point number.  The string produced by
     * <code>{@link java.lang.String#valueOf(double)} is translated into bytes
     * according to the platform's default character encoding, and these bytes
     * are written in exactly the manner of the <code>{@link #write(int)}
     * method.
     *
     * @param      d   The <code>double</code> to be printed
     */
    public void print(double d) {
	write(String.valueOf(d));
    }

    /**
     * Print an array of characters.  The characters are converted into bytes
     * according to the platform's default character encoding, and these bytes
     * are written in exactly the manner of the <code>{@link #write(int)}
     * method.
     *
     * @param      s   The array of chars to be printed
     *
     * @throws  NullPointerException  If <code>s</code> is <code>null</code>
     */
    public void print(char s[]) {
	write(s);
    }

    /**
     * Print a string.  If the argument is <code>null</code> then the string
     * <code>"null"</code> is printed.  Otherwise, the string's characters are
     * converted into bytes according to the platform's default character
     * encoding, and these bytes are written in exactly the manner of the
     * <code>{@link #write(int)} method.
     *
     * @param      s   The <code>String</code> to be printed
     */
    public void print(String s) {
	if (s == null) {
	    s = "null";
	}
	write(s);
    }

    /**
     * Print an object.  The string produced by the <code>{@link
     * java.lang.String#valueOf(Object)} method is translated into bytes
     * according to the platform's default character encoding, and these bytes
     * are written in exactly the manner of the <code>{@link #write(int)}
     * method.
     *
     * @param      obj   The <code>Object</code> to be printed
     */
    public void print(Object obj) {
	write(String.valueOf(obj));
    }


    /* Methods that do terminate lines */

    /**
     * Terminate the current line by writing the line separator string.  The
     * line separator string is defined by the system property
     * <code>line.separator</code>, and is not necessarily a single newline
     * character (<code>'\n'</code>).
     */
    public void println() {
	newLine();
    }

    /**
     * Print a boolean and then terminate the line.  This method behaves as
     * though it invokes <code>{@link #print(boolean)} and then <code>{@link
     * #println()}</code>.
     */
    public void println(boolean x) {
	synchronized (this) {
	    print(x);
	    newLine();
	}
    }

    /**
     * Print a character and then terminate the line.  This method behaves as
     * though it invokes <code>{@link #print(char)} and then <code>{@link
     * #println()}</code>.
     */
    public void println(char x) {
	synchronized (this) {
	    print(x);
	    newLine();
	}
    }

    /**
     * Print an integer and then terminate the line.  This method behaves as
     * though it invokes <code>{@link #print(int)} and then <code>{@link
     * #println()}</code>.
     */
    public void println(int x) {
	synchronized (this) {
	    print(x);
	    newLine();
	}
    }

    /**
     * Print a long and then terminate the line.  This method behaves as
     * though it invokes <code>{@link #print(long)} and then <code>{@link
     * #println()}</code>.
     */
    public void println(long x) {
	synchronized (this) {
	    print(x);
	    newLine();
	}
    }

    /**
     * Print a float and then terminate the line.  This method behaves as
     * though it invokes <code>{@link #print(float)} and then <code>{@link
     * #println()}</code>.
     */
    public void println(float x) {
	synchronized (this) {
	    print(x);
	    newLine();
	}
    }

    /**
     * Print a double and then terminate the line.  This method behaves as
     * though it invokes <code>{@link #print(double)} and then <code>{@link
     * #println()}</code>.
     */
    public void println(double x) {
	synchronized (this) {
	    print(x);
	    newLine();
	}
    }

    /**
     * Print an array of characters and then terminate the line.  This method
     * behaves as though it invokes <code>{@link #print(char[])} and then
     * <code>{@link #println()}</code>.
     */
    public void println(char x[]) {
	synchronized (this) {
	    print(x);
	    newLine();
	}
    }

    /**
     * Print a String and then terminate the line.  This method behaves as
     * though it invokes <code>{@link #print(String)} and then <code>{@link
     * #println()}</code>.
     */
    public void println(String x) {
	synchronized (this) {
	    print(x);
	    newLine();
	}
    }

    /**
     * Print an Object and then terminate the line.  This method behaves as
     * though it invokes <code>{@link #print(Object)} and then <code>{@link
     * #println()}</code>.
     */
    public void println(Object x) {
	synchronized (this) {
	    print(x);
	    newLine();
	}
    }
}


Но при попытке скормить конструктору CodepagePrintStream строки типа "Cp1252", "Cp850" или "Cp437" вылезают кракозябры.
PS. Win XP Sp3
...
Рейтинг: 0 / 0
Как заставить яву выдавать сообщения об ошибках только на английском языке ?
    #38290949
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ozzmosisНо при попытке скормить конструктору CodepagePrintStream строки типа "Cp1252", "Cp850" или "Cp437" вылезают кракозябры.И что вас удивляет? Ни одна из перечисленных кодировок русских букв не содержит.

P.S. Не надо думать, что смена кодовой страницы хоть как-то влияет на язык сообщений.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как заставить яву выдавать сообщения об ошибках только на английском языке ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]