0
現在、ソケットプログラミングを行っており、ネットワーク上でユニコード文字を送信したいとします。しかし、文字は正しく表示されません。ユニコードテキストが正しくネットワーク上で送受信されない
問題は、IntelliJ IDEA IDEから実行中に文字が正しく表示されることです。しかし、私がJARを配備したり、コマンドラインで実行すると、 "???"ユニコード文字の代わりに表示されます。
私はWindows 10 64ビットを使用しています。
サンプルテキスト: "गूड"
ソースコード:
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.TextArea;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;
import java.io.IOException;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
@SuppressWarnings("InfiniteLoopStatement")
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("Hello World");
VBox vBox = new VBox();
primaryStage.setScene(new Scene(vBox, 300, 275));
primaryStage.show();
primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent event) {
System.exit(0);
}
});
final TextArea receivedTextArea = new TextArea();
final TextArea sendTextArea = new TextArea();
sendTextArea.setPromptText("Enter message to send.");
vBox.getChildren().addAll(receivedTextArea, sendTextArea);
receivedTextArea.setEditable(false);
new Thread(new Runnable() {
@Override
public void run() {
try {
ServerSocket serverSocket = new ServerSocket(4444);
Socket socket = serverSocket.accept();
Scanner in = new Scanner(socket.getInputStream());
while (true) {
receivedTextArea.setText(in.nextLine());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
try {
Socket socket = new Socket("localhost", 4444);
final PrintStream out = new PrintStream(socket.getOutputStream(), true);
sendTextArea.setOnKeyReleased(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent event) {
if (event.getCode() == KeyCode.ENTER) {
out.println(sendTextArea.getText().trim());
sendTextArea.setText("");
}
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}
Mayber IntelIJは、デフォルトエンコードとして使用するエンコードを指定します。正しい文字セットを指定してください。たとえば、 '新しいScanner(socket.getInputStream()、" utf-8 ")' – fabian