2016-12-21 20 views
1

PHPでsocket_readの機能を使用して、javaアプリケーションから送信されたデータを読み取っています。しかし、私がキリル文字を送信しようとすると、PHPは間違ってそれを解釈します。PHP:socket_readキリル文字の場合のエンコードの問題

Java側:

... 
ServerSocket socket = new ServerSocket(port); 
Socket connection = socket.accept(); 
DataOutputStream response = new DataOutputStream(connection.getOutputStream()); 

String responseStr = "коти"; //cyrillic text 
response.writeBytes(responseStr); 
response.flush(); 
response.close(); 
... 

PHP側:

... 
$response = ""; 
$next = ''; 
while ($next = socket_read(static::getSocket(), self::READ_PORT)) { 
$response .= $next; 
} 
echo "<br>Response: " . $response . "<br>"; 
... 

出力:

Response: :>B8 

予想される出力:

Response: коти 

ラテン文字でうまく動作します。機能mb_convert_encodingは役に立ちません。 ご協力いただきありがとうございます。

答えて

1

私はこの問題がJava側にあると思います。 writeBytesを使用してマルチバイト文字列を出力する際に​​問題があります。 Javadocs "文字列内の各文字は、上位8ビットを破棄して順番に書き出されます。"

writeBytesの代わりにwriteByteを使用できます。 文字列をバイト配列に変換し、writeByteを使用して出力します。

0

解決策が見つかりました:メアリーが述べたように、writeBytesを使用してマルチバイト文字列を出力する際に​​問題が発生しました。ソリューション:

... 
    BufferedWriter bufOut = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream())); 

     bufOut.write(responseStr); 
     bufOut.newLine(); 
     bufOut.flush(); 
     bufOut.close(); 
    ... 
関連する問題