2009-09-29 7 views
3

Je suis un débutant en Java, alors s'il vous plaît gardez avec moi si c'est un problème très facile. J'ai un test JUnit où j'ai un mot japonais codé en dur assigné directement à une variable de chaîne. Maintenant, juste après que cette chaîne est assignée, elle devient "??" ce qui signifie que l'encodage est incorrect quelque part. Puisqu'il s'agit d'un test, je crois qu'il isole complètement le problème des autres environnements d'interface utilisateur. S'il vous plait aidez moi avec ceci. Été 2 jours sans solution. Merci d'avance.Japonais String en Java

+0

peut-être que votre débogueur est non conforme? En outre, vous ne pouvez pas supposer que la chaîne affectée est Unicode en regardant votre exemple de code. Donc, comme John Skeet l'a suggéré, la représentation pourrait être meilleure. – user224579

Répondre

4

Si vous avez la même chaîne deux fois, cela ne devrait pas vraiment importer quel codage est utilisé ... mais je suggérerais d'utiliser le format d'échappement \uxxxx pour indiquer quels caractères Unicode sont réellement utilisés. De cette façon, il est fondamentalement indépendant de l'encodage. Si vous voulez vraiment voulez utiliser des littéraux de chaîne avec le japonais dans votre code, vérifiez que tous vos outils de construction (etc) sont d'accord sur l'encodage de fichier que vous utilisez. Cela varie entre IDE, Ant etc. (Il est le drapeau -encoding pour javac, par exemple.)

1

Une petite mise à jour sur mon commentaire précédent: j'ai pu reproduire vos résultats, avec les points d'interrogation. Je l'ai fait exactement comme vous l'avez fait, sauf que j'ai changé mes paramètres par défaut du shell LANG.

La raison pour laquelle vous pourriez obtenir des points d'interrogation est que les paramètres régionaux de votre environnement ne correspondent pas aux paramètres régionaux souhaités. Essayez de faire cette première dans votre shell (Bash):

export LANG="ja_JP.UTF-8" 

ou sous Windows:

set LANG=ja_JP.UTF-8 

Si cela ne fonctionne pas, vous pouvez essayer de l'invite de commande: chsh 65001 puis exécutez votre java programme. Désolé de jeter toutes ces suggestions ... j'espère que ça fonctionne!

+0

Merci pour votre réponse.J'ai essayé de régler le LANG (je suis sous Windows alors j'espère que c'est la même chose), mais j'ai le même problème. –

+0

Modifié ci-dessus réponse ^ – user224579

1

Si votre sortie de débogage dépend de System.out, il est possible que la sortie soit convertie au codage par défaut de votre plate-forme. (! Qui est presque toujours)

je lance toujours avec -Dfile.encoding = UTF8 quand on veut soutenir les jeux de caractères internationaux

-à-dire exécuter comme: java -Dfile.encoding = UTF8 MyApp

(REMARQUE: Si vous n'êtes pas en cours d'exécution à partir d'une CLI, il peut y avoir d'autres façons dont vous définissez ces propriétés)

1

Essayez cette

... 
    assertEquals("会社", new String(test.getBytes(),"utf8")); 
    ... 
Questions connexes