Java 两系统接口调用字符乱码问题?
PHP中文网
PHP中文网 2017-04-18 10:03:23
0
4
413
PHP中文网
PHP中文网

认证高级PHP讲师

répondre à tous(4)
伊谢尔伦

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.

Ty80

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

左手右手慢动作

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");  
迷茫

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é.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!