在php中将字符串转换为utf-8

时间:2016-02-05 06:15:22

标签: java php utf-8

有一个用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

3 个答案:

答案 0 :(得分:1)

您获得的结果[B@167cf4d是对字节数组的toString()调用。 [B表示值是字节数组。 @167cf4d是虚拟内存中的位置。你根本无法获得PHP脚本来给你相同的结果。您需要做的是在Java端修复打印,但我们不知道您使用什么API来打印它以及在哪里打印。它是一个Web应用程序,一个本地应用程序等......?

编辑:
由于您在Java Web应用程序中使用它,因此有两种可能的情况。代码可以在Servlet中,也可以在JSP中。如果它在servlet中,你必须将输出设置为UTF-8,然后你可以像这样简单地打印字符串:

        response.setCharacterEncoding("UTF-8");
        PrintWriter out = response.getWriter();
        out.write("AWS4");
        out.write(key);

如果它在JSP中,这会使它更加不方便,因为你必须确保在打印开始之前不要像新行一样留下白色空格。对于常规HTML页面来说这不是问题,但如果您需要精确格式化输出到最后一个字节,那么这就是一个问题。 responseout对象很容易存在。您可能会在其中添加一些带有属性的<%@page个标记,因此您必须确保在关闭最后一个标记时打开下一个标记。此外,文件末尾的新行可能会使结果产生偏差,因此通常不建议将JSP用于对空白区域敏感的数据输出。

答案 1 :(得分:0)

如果没有将字节数转换为字符串,则无法对其进行系统输出,默认情况下为UTF-8,当您执行以下操作时,将调用toString():

table tr td:last-child:before {
  content: attr(data-name) ": \A";
  white-space: pre;
  font-weight: bold;
}

table tr td:first-child {
  display: none;
}

这将输出您上面提到的垃圾。而是创建标准String类的新实例。

System.out.println("Weird output: " + byteArray);

答案 2 :(得分:0)

在Java中,您获得字节数组的对象引用,而不是其值。尝试:

.dashboard-submenuicon{
           background-image:url('your_image_url');
            background-repeat: no-repeat;
            display: inline-block;
            height: 22px;
            vertical-align: middle;
            width: 22px;
            margin-right:5px;