2017-06-11 9 views
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); 
    } 

} 
+1

Mayber IntelIJは、デフォルトエンコードとして使用するエンコードを指定します。正しい文字セットを指定してください。たとえば、 '新しいScanner(socket.getInputStream()、" utf-8 ")' – fabian

答えて

0

(ストリーム、バイト文字列変換、など)、文字通りどこでも"UTF-8"を使用しては仕事をしてくれました。

関連する問題