Получить оригинальную строку в Java, закодированную в неизвестном формате в устаревшем приложении - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь получить оригинальную строку, закодированную в неизвестном формате.Я не знаю, какую кодировку он использует в устаревшем приложении.

Например, пользователь вводит Special[Home]^ в устаревшей системе, он сохраняет "Special¢Home!¬" в базе данных DB2.

Он правильно работает в устаревшей системе, где он кодирует и декодирует в нужном формате как Special[Home]^.

Когда я пытаюсь прочитать те же данные Special[Home]^ из приложения Java, он читается как Special¢Home!¬

Я также пытался найти правильную кодировку, используя код, показанный ниже, но не работает.Любая помощь будет оценена.

@Test
public void charsetTest() {
  String encodedString = "Special¢Home!¬";
  String originalString = "Special[Home]^";
  Map<String, Charset> availableCharsets = Charset.availableCharsets();
  Set<String> keySet = availableCharsets.keySet();
  for (String key : keySet) {
    Charset charset = availableCharsets.get(key);
    try {
      String decodedString = new String(charset.encode(encodedString).array(), charset);
      System.out.println(decodedString + ":  " + charset);
      if (originalString.equals(decodedString)) {
        System.out.println("match found: -> " + originalString + ":  " + charset);
      }
    } catch (UnsupportedOperationException e) {
      /*  e.printStackTrace(); */
    }
  }
}

1 Ответ

0 голосов
/ 31 января 2019

Учитывая возможность двойных преобразований, попробуйте этот код:

public static void main(String[] arg) {
  String encodedString = "Special¢Home!¬";
  String originalString = "Special[Home]^";
  Map<String, Charset> availableCharsets = Charset.availableCharsets();
  Set<String> keySet = availableCharsets.keySet();
  for (String key : keySet) {
    for (String key2 : keySet) {
      Charset charset = availableCharsets.get(key);
      Charset charset2 = availableCharsets.get(key2);
      try {
        String decodedString = new String(charset.encode(encodedString).array(), charset2);
        if (originalString.equals(decodedString)) {
          System.out.println(originalString + ":  " + charset + " -> " + charset2);
        }
      } catch (UnsupportedOperationException e) {
        /*  e.printStackTrace(); */
      }
    }
  }
}

Он создает несколько комбинаций.

output:
Special[Home]^:  IBM-Thai -> x-IBM1166
Special[Home]^:  IBM-Thai -> x-IBM875
Special[Home]^:  IBM01140 -> IBM01148
Special[Home]^:  IBM01140 -> IBM500
Special[Home]^:  IBM01140 -> IBM870
...
...