Netbeans ascii unicode char не работает декодирование кодировки base64 - PullRequest
0 голосов
/ 13 июля 2020

Я настроил алгоритм base64, и он правильно работает в cmd. В этом алгоритме изменены некоторые символы и другие материалы для исследовательских целей.

Я нашел оригинальный алгоритм base64 по следующей ссылке https://en.wikibooks.org/wiki/Algorithm_Implementation/Miscellaneous/Base64

, поэтому новый код настройки работает правильно в командной строке, но когда стартовый код в netbeans GUI выдает ошибку из-за символов юникода.

Почему ascii unicode не работает в netbeans, но работает в терминале? Как использовать это значение кода ascii в netbeans GUI?

Ниже приведен мой базовый код после некоторых изменений.

class CustomeBase64Encode {
    //Old Char
    //private final static String base64chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    //New Char
    private final static String base64chars = "☻♥♦♣♠•◘○♂☼►♫☼‼_MyCustomeCharacters+/";

    public static String encode(String s) {

    // the result/encoded string, the padding string, and the pad count
    String r = "", p = "";
    int c = s.length() % 3;

    // add a right zero pad to make this string a multiple of 3 characters
    if (c > 0) {
        for (; c < 3; c++) {
        p += "=";
        s += "\0";
        }
    }

    // increment over the length of the string, three characters at a time
    for (c = 0; c < s.length(); c += 3) {

        // we add newlines after every 76 output characters, according to
        // the MIME specs
        if (c > 0 && (c / 3 * 4) % 76 == 0)
        r += "\r\n";

        // these three 8-bit (ASCII) characters become one 24-bit number
        int n = (s.charAt(c) << 16) + (s.charAt(c + 1) << 8)
            + (s.charAt(c + 2));

        // this 24-bit number gets separated into four 6-bit numbers
        int n1 = (n >> 18) & 63, n2 = (n >> 12) & 63, n3 = (n >> 6) & 63, n4 = n & 63;

        // those four 6-bit numbers are used as indices into the base64
        // character list
        r += "" + base64chars.charAt(n1) + base64chars.charAt(n2)
            + base64chars.charAt(n3) + base64chars.charAt(n4);
    }

    return r.substring(0, r.length() - p.length()) + p;
    }

public static String decode(String s) {

s = s.replaceAll("[^" + chars64 + "=]", "");

String p = (s.charAt(s.length() - 1) == '=' ? 
    (s.charAt(s.length() - 2) == '=' ? "☻☻" : "☻") : "");
String r = "";
s = s.substring(0, s.length() - p.length()) + p;

for (int c = 0; c < s.length(); c += 4) {
    int n = (chars64.indexOf(s.charAt(c)) << 18)
        + (chars64.indexOf(s.charAt(c + 1)) << 12)
        + (chars64.indexOf(s.charAt(c + 2)) << 6)
        + chars64.indexOf(s.charAt(c + 3));

    r += "" + (char) ((n >>> 16) & 0xFF) + (char) ((n >>> 8) & 0xFF)
        + (char) (n & 0xFF);
}

// remove any zero pad that was added to make this a multiple of 24 bits
return r.substring(0, r.length() - p.length());
}
}
...