Простой ответ на заданный вопрос заключается в том, что доступные строки charset варьируются от платформы к платформе.
Тем не менее, есть шесть, которые должны присутствовать, поэтому константы могли быть сделаны для тех, кто давно. Я не знаю, почему они не были.
JDK 1.4 сделал отличную вещь, представив тип Charset. На этом этапе они больше не хотели бы предоставлять строковые константы, поскольку цель состоит в том, чтобы заставить всех использовать экземпляры Charset. Так почему же тогда не предоставить шесть стандартных констант Charset? Я спросил Мартина Буххольца, так как он сидит рядом со мной, и он сказал, что не было действительно особой причины, за исключением того, что в то время все еще не получилось - слишком мало API JDK было модифицировано для принять Charset, и из тех, которые были, перегрузки Charset обычно выполнялись немного хуже.
Печально, что только в JDK 1.6 они наконец-то закончили оснащение перегрузками Charset. И что эта ситуация с производительностью в обратном направлении все еще существует (причина, почему это невероятно странно, и я не могу это объяснить, но это связано с безопасностью!).
Короче говоря - просто определите свои собственные константы или используйте класс Charsets Guava, с которым связан Тони Пони (хотя эта библиотека на самом деле еще не выпущена).
Обновление:StandardCharsets
класс в JDK 7.
MessageDigest#getInstance()
Кстати, та же история продолжается .