簡體   English   中英

將字節數組從一種編碼轉換為另一種java

[英]Convert a byte array from one encoding to another java

大家好,我應該將此代碼轉換為 Java 中的 C#。 你能幫我一把嗎?

private static String ConvertStringToHexStringByteArray(String input) {
        Encoding ebcdic = Encoding.GetEncoding("IBM037");
        Encoding utf8 = Encoding.UTF8;
        byte[] utfBytes = utf8.GetBytes(input);
        byte[] isoBytes = Encoding.Convert(utf8, ebcdic, utfBytes);
        StringBuilder hex = new StringBuilder(isoBytes.length * 2);
        foreach( byte b in isoBytes)
        hex.AppendFormat("{0:x2}", b);
        return hex.ToString();

    }

我試圖像這樣將它轉換為java。 但結果是不同的:

private static String ConvertStringToHexStringByteArray(String input) throws UnsupportedEncodingException {

        byte[] isoBytes = input.getBytes("IBM037");
        StringBuilder hex = new StringBuilder(isoBytes.length * 2);

        for (byte b : isoBytes) {
            hex.append(String.format("%02x", b));
        }
        return hex.toString();

    }

input = "X1GRUPPO 00000000726272772"
expected = "e7f1c7d9e4d7d7d64040404040f0f0f0f0f0f0f0f0f1f6f7f3f5f3f5f5f2"
result = "e7f1c7d9e4d7d7d640f0f0f0f0f0f0f0f0f7f2f6f2f7f2f7f7f2"

我究竟做錯了什么?

您的代碼有效,但您正在比較兩個不同輸入字符串的輸出。

當您並排編寫expectedresult

e7f1c7d9e4d7d7d64040404040f0f0f0f0f0f0f0f0f1f6f7f3f5f3f5f5f2
e7f1c7d9e4d7d7d640f0f0f0f0f0f0f0f0f7f2f6f2f7f2f7f7f2

您會注意到兩者都以相同的序列 ( e7f1c7d9e4d7d7d6 ) 開頭,這似乎來自一個共同的開頭X1GRUPPO

但是兩個輸出不同:

4040404040f0f0f0f0f0f0f0f0f1f6f7f3f5f3f5f5f2
40f0f0f0f0f0f0f0f0f7f2f6f2f7f2f7f7f2

根據您提供的輸入推斷,第一個輸入字符串的其余部分以 5 個空格開頭,后跟"00000000167353552"

這意味着 C# 代碼的完整輸入是"X1GRUPPO 00000000167353552" ,這與您提供給 Java 代碼的輸入不同,然后顯然輸出不匹配。

暫無
暫無

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

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