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

标签 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

最佳答案

结果[B@167cf4d您得到的是 toString()调用字节数组。 [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 页面来说这不是问题,但如果您需要精确格式化输出到最后一个字节,则会出现问题。 responseout物体在那里很容易存在。您可能会有一些<%@page那里有带有属性的标签,因此您必须确保在关闭上一个标签时打开下一个标签。另外,文件末尾的新行可能会扭曲结果,因此一般情况下,不建议将 JSP 用于空白敏感数据输出。

关于java - 在php中将字符串转换为utf-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35217454/

相关文章:

java - p :inputText in p:inplace when DB constraint validation failed 的重置值

java - JSOUP 登录失败

java - 如何用java画简单的眼睛

php - 在启用 opcache 之前找不到 Laravel PHP5.6 类

php - 使用 FFMPEG 消除或减少录制音频中的噪音

android - 如何在 android 的 TextView 中显示两种字体的句子组合?

java - Java中的特殊字符

ruby - 在 ruby​​ 中处理编码

java - 将 "Spring Data JPA"方法查询转换为 JPQL 查询

php - 如何使用 php 更新 sql 中的图像