По моему мнению, программа тестирования глубоко испорчена, потому что она делает практически бесполезные преобразования между строками без семантического значения.
Если вы хотите проверить, являются ли все байтовые значения действительными значениями для данной кодировки, то что-то вроде этого может быть больше похоже на это:
public static void tryEncoding(final String encoding) throws UnsupportedEncodingException {
int badCount = 0;
for (int i = 1; i < 255; i++) {
byte[] bytes = new byte[] { (byte) i };
String toString = new String(bytes, encoding);
byte[] fromString = toString.getBytes(encoding);
if (!Arrays.equals(bytes, fromString)) {
System.out.println("Can't encode: " + i + " - in: " + Arrays.toString(bytes) + "/ out: "
+ Arrays.toString(fromString) + " - result: " + toString);
badCount++;
}
}
System.out.println("Bad count: " + badCount);
}
Обратите внимание, что эта программа тестирования проверяет входные данные с использованием (usnigned) значений байтов от 1 до 255. Код в вопросе использует значения char (эквивалентные кодовым точкам Unicode в этом диапазон) от 1 до 255.
Попробуйте напечатать фактические байтовые массивы, обработанные программой в примере, и вы увидите, что вы на самом деле не проверяете все значения байтов и что некоторые из ваших "плохих" совпадений являются дубликатами других.
Выполнение этого с "Windows-1252"
в качестве аргумента приводит к выводу:
Can't encode: 129 - in: [-127]/ out: [63] - result: �
Can't encode: 141 - in: [-115]/ out: [63] - result: �
Can't encode: 143 - in: [-113]/ out: [63] - result: �
Can't encode: 144 - in: [-112]/ out: [63] - result: �
Can't encode: 157 - in: [-99]/ out: [63] - result: �
Bad count: 5
Что говорит нам о том, что Windows-1252
не принимает значения байтов 129, 1441, 143, 144 и 157 в качестве допустимых значений. (Примечание: здесь я говорю о значениях без знака. Приведенный выше код показывает -127, -115, ... потому что Java знает только байты без знака).
Статья в Википедии о Windows-1252 , кажется, подтверждает это наблюдение, заявляя следующее:
Согласно информации на сайтах Microsoft и Консорциума Unicode, позиции 81, 8D, 8F, 90 и 9D не используются