powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Пропадают символы
10 сообщений из 10, страница 1 из 1
Пропадают символы
    #39971051
Gezmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток.
Код: 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.
package com.gezmo;
 
import java.io.IOException;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
 
public class ControlService {
	private static int numberPort = 8189;
	public static void main(String[] args) {
		try {
		ServerSocket serverSocket = new ServerSocket(numberPort);
		while(true) {
			Socket socket = serverSocket.accept();
			new Thread(new MyServer(socket,serverSocket)).start();
		}
		}catch (Exception e) {
			e.printStackTrace();
		}
	}
}
 
class MyServer implements Runnable{
	Socket socket;
	ServerSocket serverSocket;
	
	public MyServer(Socket socket, ServerSocket serverSocket) {
		this.socket = socket;
		this.serverSocket = serverSocket;
	}
	@Override
	public void run() {
		try {
			Scanner scanner = new Scanner(socket.getInputStream());
			PrintWriter writer = new PrintWriter(socket.getOutputStream(),true);
			//PrintWriter writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "866")), true);
			Service service = new Service(writer);
			writer.println("You connect to: " + InetAddress.getLocalHost());
			while(true) {
				String str = "";
				if(scanner.hasNext()) {
					str = scanner.nextLine();
				}
				if(str.equals("exit")) {
					scanner.close();
					socket.close();
					break;
				}
				if(str.equals("list")) {
					service.getService();
				}
				if(str.equals("stop")) {
					
				}
				if(str.equals("run")) {
					
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}



Код: 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.
package com.gezmo;
 
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
public class Service {
	PrintWriter writer;
	
	public Service(PrintWriter writer) {
		this.writer = writer;
	}
 
	void getService() {
		try {
			String regexp = "[\\s]{2,}";//pattern regexp
			Pattern pattern = Pattern.compile(regexp);
			Process process = Runtime.getRuntime().exec("sc query type= service state= all");
		    final Scanner reader = new Scanner(process.getInputStream());
		    while(reader.hasNextLine()) {
		    	String str = new String(reader.nextLine().getBytes(),"866");
		    	if(str.matches("^SERVICE_NAME:.*") || str.matches("^DISPLAY_NAME:.*") || str.matches(".*STATE.*")
		    			|| str.matches("^Имя_службы:.*") || str.matches("^Выводимое_имя:.*") || str.matches(".*Состояние.*")) {
		    		Matcher matcher = pattern.matcher(str);
		    		str = matcher.replaceAll(" ");
		    		str = str.trim();
		    		char fchar = str.charAt(0);
		    		int ichar = (int)fchar;
		    		System.out.println(str);
		    		writer.println(str);
		    		writer.println(ichar);
		    	}
		    }
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	void stopService() {
	}
	void runService() {
	}
}



Однако для некоторых элементов

Пропали русские буквы.
Всё запускается локально. Windows 10.
Подскажите пожалуйста, почему так происходит и как это можно исправить?
Спасибо.
...
Рейтинг: 0 / 0
Пропадают символы
    #39971085
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если ты в консоли наберешь

Код: java
1.
c:\ chcp



что ответит?
...
Рейтинг: 0 / 0
Пропадают символы
    #39971086
Gezmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,
Код: powershell
1.
2.
C:\>chcp
Текущая кодовая страница: 866


В Eclipce выставлены параметры JVM
Код: powershell
1.
-DconsoleEncoding=Cp866 -Dfile.encoding=Cp866
...
Рейтинг: 0 / 0
Пропадают символы
    #39971088
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кодировку надо применять непосредственно в том месте где ты получил InputStream.
...
Рейтинг: 0 / 0
Пропадают символы
    #39971114
Gezmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,
Правильно ли я Вас понял, что кодировку нужно указать в строке
Код: java
1.
Scanner reader = new Scanner(process.getInputStream(), "CP866");


метода "getService()"?
Я попробовал это сделать, однако это не исправило ситуацию.
Мне так же не понятно, почему в некоторых случаях, русские буквы выводятся, а в некоторых нет, неужели один вывод команды, даёт разные кодировки?
...
Рейтинг: 0 / 0
Пропадают символы
    #39971137
Gezmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробовал использовать другой клиент (Putty), в нем все символы отобразились правильно.
Получается вопрос к клиенту(проблемный cmd), PrintWriter или Scanner?
...
Рейтинг: 0 / 0
Пропадают символы
    #39971171
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не знаю как работает sc и что это такое.
Попробуй 1251, utf8.

Если не поможет. Заходи в putty.
C помощью sc сделай spool в текстовый файл

Этот файл заведомо должен содержать русскую букву а.

Далее с помощью dump или hexdump надо посмотреть какой шестнадцатеричный код ей соответствует.

Дальше или я или другие мемберы - подскажут.
...
Рейтинг: 0 / 0
Пропадают символы
    #39971375
Gezmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что заметил, если в консоли cmd несколько раз выполнять команду list(получение списка служб) то результат будет разным т.е. русские буквы могут в одном случае быть, а в другом исчезнуть.
Цифры что показаны на скринах, это же коды нулевого символа в строке. Получается перед отправкой клиенту, строка "нормальная" и только на стороне клиента она "портится" только в виде отображения.
Опыт с Putty это показывает.
Есть ли другие способы отправить клиенту информацию?
При изменении кодировки, результат тот же, в некоторых сообщениях русские символы есть, в других случаях может не быть.
При выполнении команды "sc query type= service state= all" в cmd windows без подключения к серверу, русские буквы отображаются полностью корректно.
...
Рейтинг: 0 / 0
Пропадают символы
    #39971380
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Покопайся в настройках Putty. Насколько я понимаю ssh клиент поддерживает протокол
согласования языковых настроек. Это должно происходить прозрачно во время коннекта.

Здесь я на 100% не уверен но почитай.

https://tools.ietf.org/html/rfc4253
https://tools.ietf.org/html/rfc3066
...
Рейтинг: 0 / 0
Пропадают символы
    #39971384
Gezmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дали совет сделать задержку в цикле метода getService().
Сделал Thread.sleep(2).
Русские символы сразу появились.

Спасибо за помощь.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Пропадают символы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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