Encoder Chaîne de caractères UTF-8

J'ai une Corde avec un " - " le personnage et j'ai quelques problèmes avec elle. J'ai besoin de coder cette Chaîne pour l'encodage UTF-8. J'ai essayé de cette manière, mais ça ne fonctionne pas:

byte ptext[] = myString.getBytes();
String value = new String(ptext, "UTF-8");

Comment puis-je encoder la chaîne utf-8?

  • Il est difficile de savoir exactement ce que vous essayez de faire. Ne myString correctement contenir le ñ caractère et vous avez des problèmes en la convertissant en un tableau d'octets (dans ce cas voir les réponses de Pierre et Amir), ou est myString endommagé et que vous essayez de résoudre (dans ce cas, voir les réponses de Joachim et moi)?
  • J'ai besoin d'envoyer myString à un serveur avec l'encodage utf-8 et j'ai besoin de convertir les " - " le caractère de l'encodage utf-8.
  • Ainsi, si le serveur s'attend à ce UTF-8, puis ce que vous devez l'envoyer sont octets, pas une Chaîne de caractères. De sorte que par la réponse de Pierre, spécifier l'encodage dans la première ligne et de la chute de la deuxième ligne.
  • Je suis d'accord qu'il n'est pas clair quelle est la véritable intention est ici. Il semble y avoir beaucoup de questions où les gens essaient de conversions explicites entre les Cordes et les octets plutôt que de laisser le {In,Out}putStream{Read,Writ}ers le faire pour eux. Je me demande pourquoi?
  • ma conjecture est que ces questions sont posées par des personnes dont les expériences antérieures avec des langages comme C ou en PHP si une chaîne est essentiellement la même chose que d'un tableau d'octets et que vous avez à suivre son encodage séparément (et la conversion d'une chaîne à partir d'un encodage à un autre a un sens).
  • Merci, je suppose que ça a du sens. Mais elle rend aussi plus difficile qu'il doit être, n'est-ce pas? Je ne suis pas très friand des langues de travail de cette façon, et donc, essayez d'éviter de travailler avec eux. Je pense que Java est le modèle de Chaînes de caractères au lieu d'octets rend les choses beaucoup plus facile. Perl et Python aussi partager le “tout est des chaînes Unicode” modèle. Oui, dans tous les trois, vous pouvez toujours obtenir à octets si vous travaillez à lui, mais dans la pratique, il semble rare que vous avez vraiment besoin d': c'est assez bas niveau. De Plus il se sent un peu comme se brosser les dents d'un chat dans la mauvaise direction, si vous savez ce que je veux dire. 🙂
  • Je suis complètement d'accord qu'une forte chaîne de l'abstraction est une très bonne chose. Mais C est à partir d'un temps long avant Unicode existé, quand il n'y a pas de codage unique qui pourrait représenter tous les caractères, et quand toute sorte d'abstraction plus pure octets aurait été intolérable de la performance. Les programmeurs Java sont de la chance qu'il a adapté Unicode relativement bien depuis le début. Perl et Python sont plus âgés et avaient support de l'Unicode rénovés, ce qui le rend beaucoup moins propre (explicite str/unicode dualité en Python, méchant implicite UTF-8 drapeau en Perl.
  • Le Python de la dualité est assez gênant; je suis toujours oublier /u en Python, même problème avec PHP. Avec Perl 5.14, maintenant dans RC1 test, vous pouvez enfin get toutes les chaînes Unicode. Perl regexes sont encore beaucoup plus d'Unicode de l'environnement que de Java, mais j'ai travaillé avec le JDK7 les gens à résoudre qu'.
  • double possible de Comment faire pour convertir des Chaînes et de l'UTF8 tableaux d'octets en Java

InformationsquelleAutor Alex | 2011-04-20