我在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
没有帮助。
提前感谢您的帮助。
答案 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();
...