私が書いた小さなエコーサーバーに日本語の文字を取り込もうとしています。問題は、System.in から文字を取得すると (スキャナーなどを介してInputStream
名前を付けます)、常にゴミとして入ってくることです。私も使ってみました
message = new String(bufferedReader.readLine().getBytes("UTF8");
バイトを Unicode として取得しようとするためです。
サーバーからメッセージを出力すると、ようこそ (日本語でようこそ) 正常に表示されます。問題は、ユーザー入力を取得するときにのみ存在します。
コンソールは、Eclipse で UTF8 を使用するように設定されています。
System.in からの入力であることを確認するために作成した小さなテスト プログラムを次に示します。
入力と出力は
よ
よ
そして、ここにコードがあります
public class TestUnicode {
public static void main(String[] args) throws IOException
{
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in, "UTF8"));
String message = stdIn.readLine();
System.out.println(message);
}
}
public class Client {
public static void main(String[] args) throws IOException
{
Socket serverSocket = null;
try
{
serverSocket = new Socket("192.168.1.127", 3000); //connect to myself at port 3000
}
catch(IOException e)
{
System.out.println(e);
System.exit(1);
}
BufferedReader in = null;
PrintStream out = null;
try //create in and out to write and read from echo
{
in = new BufferedReader(new InputStreamReader(serverSocket.getInputStream()));
out = new PrintStream(serverSocket.getOutputStream(), true);
}
catch(IOException e)
{
serverSocket.close();
System.out.println(e);
System.exit(1);
}
String message = null;
message = in.readLine();
System.out.println(message); //print out the welcome message
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
//create a new buffered reader from my input
try
{
while(true)
{
message = bufferedReader.readLine();
out.println(message); //send a line to the server
if(message.equals("quit"))
{
System.out.println(in.readLine());
break;
}
System.out.println(in.readLine()); //get it back and print it
}
System.out.println("Quiting client...");
}
catch(IOException e)
{
in.close();
out.close();
serverSocket.close();
System.out.println(e);
System.exit(1);
}
in.close();
out.close();
serverSocket.close();
}
}