有一个用Java编写的脚本,我正在尝试将它转换成PHP,但是我没有得到相同的输出。
如何在PHP中获得与Java相同的信息?
用Java编写的脚本
String key = "hghBGJH/gjhgRGB+rfr4654FeVw12y86GHJGHbnhgnh+J+15F56H";
byte[] kSecret = ("AWS4" + key).getBytes("UTF8");输出:[B@167cf4d
用PHP编写的脚本
$secret_key = "hghBGJH/gjhgRGB+rfr4654FeVw12y86GHJGHbnhgnh+J+15F56H";
utf8_encode("AWS4".$secret_key);输出:AWS4hghBGJH/gjhgRGB+rfr4654FeVw12y86GHJGHbnhgnh+J+15F56H
发布于 2016-02-05 08:19:02
得到的结果是字节数组上的[B@167cf4d调用。[B表示该值是一个字节数组。@167cf4d是它在虚拟内存中的位置。您根本无法获得PHP脚本来给出相同的结果。您需要做的是修复Java端的打印,但我们不知道用于打印它的API以及打印位置。是一个网络应用程序,一个本地应用程序,等等.?
编辑:
由于您在Java web应用程序中使用它,有两种可能的情况。代码要么在Servlet中,要么在JSP中。如果它位于servlet中,则必须将输出设置为UTF-8,然后只需打印如下所示的字符串:
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
out.write("AWS4");
out.write(key);如果它在JSP中,这会使它更不方便,因为在开始打印之前,您必须确保不留下像新行这样的空白。对于常规HTML页面来说,这不是一个问题,但如果您需要对最后一个字节进行精确格式化的输出,这将是一个问题。response和out对象在那里很容易存在。您可能会有一些带有属性的<%@page标记,因此您必须确保在关闭最后一个标记时打开下一个标记。此外,文件末尾的新行可能会使结果倾斜,因此通常不建议将JSP用于对空格敏感的数据输出。
发布于 2016-02-05 06:34:20
如果不将字节数组转换为字符串,默认情况下,toString()将被调用,当您执行如下操作时,就无法对字节数组进行处理:
System.out.println("Weird output: " + byteArray);这将输出上面提到的垃圾。相反,创建标准String类的新实例。
System.out.println("UTF-8: " + new String(byteArray));发布于 2016-02-05 06:36:19
在Java中,您可以获得字节数组的对象引用,而不是它的值。尝试:
new String(kSecret, "UTF-8");https://stackoverflow.com/questions/35217454
复制相似问题