Maison  >  Questions et réponses  >  le corps du texte

Java 两系统接口调用字符乱码问题?

PHP中文网PHP中文网2741 Il y a quelques jours416

répondre à tous(4)je répondrai

  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:05:23

    Vous devez comprendre la signification de new String(str.getBytes("GBK"),"UTF-8"); pour savoir pourquoi il a échoué.
    Tout d’abord, String en Java est codé en interne en UTF-16LE.
    str.getBytes("GBK"), obtenu un tableau d'octets, le contenu est de convertir l'encodage de str en GBK.
    new String(str.getBytes("GBK"),"UTF-8") traite le contenu de ce tableau d'octets comme des données codées en UTF-8 et le convertit en chaîne (UTF-16LE).
    Compris ? Si cela fonctionne, il y aura des fantômes.

    Le client et le serveur sont tous deux Java, donc l'encodage String en Java doit être UTF-16. Non affecté par l'encodage du système (Windows ou Linux).
    Dans ce cas, il est préférable de ne pas envoyer String directement, car String sera automatiquement converti en encodage par la bibliothèque que vous utilisez (prenez Tomcat comme exemple, l'iso8859-1 par défaut).

    Si vous pouvez envoyer et recevoir des tableaux d'octets directement , alors vous pouvez certainement utiliser le protocole UTF-8. Les données reçues par l'une ou l'autre partie sont new String(data, "UTF-8") et les données envoyées sont str.getBytes("UTF-8").

    Si vous ne pouvez pas modifier le code client ou s'il est écrit en C ou dans d'autres langages. Si vous êtes sûr que le client envoie des données GBK. Si votre serveur peut recevoir directement le tableau d'octets , new String(data, "GBK") peut être analysé. Lorsqu'il est renvoyé, il s'agit également du tableau d'octets str.getBytes("GBK").

    Si vous ne pouvez envoyer et recevoir que des chaînes, vous devez alors le configurer et définir l'encodage qu'il convertit. Par exemple, pour Tomcat, pour les données GET, web.xml doit être modifié et un élément de paramètre de codage d'URL doit être ajouté. Pour les données POST, , vous devez écrire un filtre pour convertir . S'il s'agit d'une classe de communication HTTP, elle peut fournir des méthodes telles que SetEncoding.

    répondre
    0
  • PHP中文网

    PHP中文网2017-04-18 10:05:23

    S'il s'agit d'une URL, vous pouvez utiliser la classe URLEncoder/URLDecoder

    répondre
    0
  • ringa_lee

    ringa_lee2017-04-18 10:05:23

    Si vous êtes le client :
    La chaîne que vous obtenez du serveur est codée en UTF-8. Si vous devez l'afficher, décodez d'abord la chaîne en bytecode selon UTF-8, puis suivez l'encodage GBK.
    La chaîne que vous envoyez au serveur doit également être codée en utf-8. Vous devez décoder votre chaîne codée en GBK en bytecode, puis l'encoder selon utf-8.
    Vice versa.
    La raison pour laquelle vous voyez des caractères tronqués peut être le problème d'encodage de votre terminal ?

    String gbkStr = new String(utf8Str.getBytes("utf-8"),"gbk");  
    String utf8Str = new String(gbkStr.getBytes("gbk"),"utf-8");  

    répondre
    0
  • 迷茫

    迷茫2017-04-18 10:05:23

    Peut être codé par iso8859-1 comme chaîne intermédiaire Si gbk est directement converti en utf–8, c'est-à-dire que 2 octets sont convertis en 3 octets. S'il y a un nombre impair de caractères chinois, une erreur sera-t-elle calculée lors de la conversion du dernier octet ? , il sera toujours tronqué.

    répondre
    0
  • Annulerrépondre