簡體   English   中英

在PHP中將字符串轉換為utf-8

[英]Convert string into utf-8 in php

有一個用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以及在哪里打印。 它是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用於對空格敏感的數據輸出。

您不能在不將字節數組轉換為字符串的情況下對字節數組進行sysout操作,默認情況下,執行以下操作時會默認調用UTF-8 toString():

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

這將輸出您上面提到的垃圾。 而是,創建標准String類的新實例。

System.out.println("UTF-8: " + new String(byteArray));

在Java中,您獲得字節數組的對象引用,而不是其值。 嘗試:

new String(kSecret, "UTF-8");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM