Я настроил алгоритм 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());
}
}