Я написал то, что, на мой взгляд, было очень простым, очень простым кодом для выделения символов Юникода вместе с соответствующими байтами.
public class UnicodeTesting {
public static void main(String[] args) {
System.out.println(System.getProperty("java.version"));
String header = "\u2554\u2550";
for(byte b : header.getBytes()) {
System.out.printf("%02X ", b);
}
System.out.println();
System.out.println(header);
}
}
И когда я запускаю этот код на OnlineGDB.com , я получаю ожидаемый вывод.
1.8.0_201
E2 95 94 E2 95 90
╔═
Однако, когда я запускаю точно такой же код в моей Eclipse IDE локально, я получаю совсем другой результат:
1.8.0_131
3F 3F
??
Почему это происходит?
Если я отредактирую код на стороне Eclipse, я смогу по крайней мере получить байтовые значения, чтобы получить то, что я ожидаю, заставив метод getBytes
использовать UTF-8 Кодировка:
import java.io.UnsupportedEncodingException;
public class UnicodeTesting2 {
public static void main(String[] args) throws UnsupportedEncodingException {
System.out.println(System.getProperty("java.version"));
String header = "\u2554\u2550";
for(byte b : header.getBytes("UTF-8")) {
System.out.printf("%02X ", b);
}
System.out.println();
System.out.println(header);
}
}
1.8.0_131
E2 95 94 E2 95 90
??
(я предполагаю, что моя консоль просто не поддерживает эти символы, поэтому я не беспокоюсь, что они окажутся неправильными)
Но это не объясняет, почему буквальное поведение программы различается в этих двух средах, по умолчанию используется UTF-8 в одной среде, но по умолчанию используется ASCII (я предполагаю) в Eclipse.