PHP:socket_read西里尔文本时的编码问题

时间:2016-12-21 23:58:29

标签: php encoding character-encoding

我在PHP中使用... 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(); ... 函数来读取从java app传输的数据。但是当我尝试传输西里尔文本时 - PHP错误地解释了它。

Java方面:

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

PHP方面:

Response: :>B8

输出:

Response: коти

预期产出:

mb_convert_encoding

拉丁字母可以正常使用。函数@style/Theme.AppCompat没有帮助。 提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

我认为问题出在Java方面。使用writeBytes输出多字节字符串时出现问题。 Javadocs说“字符串中的每个字符都按顺序写出,丢弃其高八位。”。

您可以使用writeByte而不是writeBytes。 将String转换为字节数组并使用writeByte输出它。

答案 1 :(得分:0)

我找到了解决方案:正如Mary所说,使用writeBytes输出多字节字符串时出现问题。解决方案:

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

        bufOut.write(responseStr);
        bufOut.newLine();
        bufOut.flush();
        bufOut.close();
    ...