Java String encoding (UTF-8))
j'ai rencontré cette ligne de code d'héritage, que j'essaie de comprendre:
String newString = new String(oldString.getBytes("UTF-8"), "UTF-8"));
<!-Pour autant que je puisse comprendre, c'est encoder et décoder en utilisant le même jeu de caractères.
EN QUOI est-ce différent de ce qui suit?
String newString = oldString;
Est-il un scénario dans lequel les deux lignes différentes sorties?
p. S.: Juste pour clarifier, Oui je suis au courant de la excellent article sur le codage par Joel Spolsky !
2 réponses
cela pourrait être une façon compliquée de faire
String newString = new String(oldString);
ceci raccourcit la chaîne de caractères sous-jacente [] utilisée est beaucoup plus longue.
cependant plus spécifiquement, il vérifiera que chaque caractère peut être encodé en UTF-8.
il y a des "caractères" que vous pouvez avoir dans une chaîne de caractères qui ne peuvent pas être encodés et ceux-ci seraient transformés en ?
tout caractère entre \uD800 et \uDFFF ne peut pas être encodé et sera transformé en '?'
String oldString = "\uD800";
String newString = new String(oldString.getBytes("UTF-8"), "UTF-8");
System.out.println(newString.equals(oldString));
imprime
false
en quoi est-ce différent de ce qui suit?
Cette ligne de code ici:
String newString = new String(oldString.getBytes("UTF-8"), "UTF-8"));
construit un nouvel objet String (c.-à-d. une copie de oldString
), alors que cette ligne de code:
String newString = oldString;
déclare une nouvelle variable de type java.lang.String
et l'initialise pour faire référence au même objet String que la variable oldString
.
Est-il un scénario dans lequel les deux lignes différentes qui ont les sorties?
Absolument:
String newString = oldString;
boolean isSameInstance = newString == oldString; // isSameInstance == true
vs.
String newString = new String(oldString.getBytes("UTF-8"), "UTF-8"));
// isSameInstance == false (in most cases)
boolean isSameInstance = newString == oldString;
a_horse_with_no_name (voir commentaire) a raison bien sûr. L'équivalent de
String newString = new String(oldString.getBytes("UTF-8"), "UTF-8"));
String newString = new String(oldString);
moins la différence subtile entre le codage que Peter Lawrey explique dans sa réponse.