1
votes

Comment réparer un mauvais décodage de base?

Lorsque j'utilise cette méthode simple d'encodage / décodage, j'ai une petite erreur. Lorsque la saisie utilisateur via le scanner est comme:
Chaîne: "Bonjour, je m'appelle Michael"
Encode: "Pmttw (u? (Vium (q {(Uqkpimt"
Décoder: "Bonjour m7 nom est Michael"

son décodé comme 'y' est maintenant '7'

public static String basicEncode(String key) {
String result = "";
int lon = key.length();
char d;
for(int i = 0; i < lon; i++) {
    d = key.charAt(i);
    d += 10;
    result += d;
}

return result;
}

public static String basicDecode(String key) {
    String result = "";
    int lon = key.length();
    char d;
    for(int i = 0; i < lon; i++) {
        d = key.charAt(i);
        d -= 10;
        result += d;
    }

    return result;
}


1 commentaires

Solution: par défaut dans mon espace de travail (Eclipse / Windows / Préférences / Espace de travail / Encodage de fichier texte >>>> basculer Default (Cp1250) à UTF-8


3 Réponses :


1
votes

Il manque un 10 dans votre code dans basicDecode. En dehors de cela, vous ne voyez pas votre problème.

Hello my name is Michael
Rovvy*w?*xkwo*s}*Wsmrkov
Hello my name is Michael

Cela produit le résultat suivant:

  public static void main(String args[]) {
    String in = "Hello my name is Michael";
    String encoded = basicEncode(in);
    String decoded = basicDecode(encoded);

    System.out.println(in);
    System.out.println(encoded);
    System.out.println(decoded);
  }

  public static String basicEncode(String key) {
    String result = "";
    int lon = key.length();
    char d;
    for (int i = 0; i < lon; i++) {
      d = key.charAt(i);
      d += 10;
      result += d;
    }

    return result;
  }

  public static String basicDecode(String key) {
    String result = "";
    int lon = key.length();
    char d;
    for (int i = 0; i < lon; i++) {
      d = key.charAt(i);
      d -= 10;
      result += d;
    }

    return result;
  }


0 commentaires

1
votes

Si vous cherchez à obtenir ceci:

Encode: "Pmttw (u? (vium (q {(Uqkpimt"

pour votre code alors

public static String basicEncode(String key) {
String result = "";
int lon = key.length();
char d;
for (int i = 0; i < lon; i++) {
  d = key.charAt(i);
  d += 8; //CHANGED TO 8
  result += d;
}

return result;


0 commentaires

0
votes

Peut-être y a-t-il quelque chose avec UTF-8 sur mon ordinateur, parce que lorsque j'exécutais ce même code sur un autre environnement PC, cela fonctionnait bien.

Comment puis-je vérifier ce qui ne va pas?

Je sais que lorsque je veux changer le nombre de positions à moins de 8, cela fonctionne bien, mais pourquoi pas s'il est égal ou supérieur à 10?


1 commentaires

Changer UTF-8 en Cp1250 a fonctionné pour moi. Windows -> Préférences -> Espace de travail -> "Encodage de fichier texte" défini sur Par défaut (Cp1250)