常见乱码分析

java编解码

如果该编码本身支持中文,同类型 编解码,中文不会乱码,
如果该编码本身不支持中文(如:US_ASCII,ISO_8859_1),同类型 编解码,中文也会乱码

StandardCharsets 不支持GBK
Charset.forName() 支持GBK

String text = "叶赫那拉7890!abC";  

String t = new String(text.getBytes(StandardCharsets.US_ASCII), StandardCharsets.US_ASCII);  

System.out.println(t);
String text = "叶赫那拉sfd阿达撒大大大阿萨达啊发发搜嘎干哈科技干哈v当然更7890!abC";  
  
byte[] utf8Bytes = text.getBytes(Charset.forName("GBK"));  
  
String t = new String(utf8Bytes, Charset.forName("UTF-8"));  
  
System.out.println(t);

乱码后复现原文

import java.nio.charset.StandardCharsets;
import java.util.Arrays;

public class He {
    public static void main(String[] args) {
        String text = "为中华崛起而读书?1234567890!.*?abcdABCD";

        System.out.println("打印经utf8编码后原文的字节数组: "+ Arrays.toString(text.getBytes(StandardCharsets.UTF_8)));

        String t = new String(text.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);
        System.out.println("经ISO_8859_1解码后的乱码内容: "+t);      // 为中åå´èµ·è读书ï¼1234567890!.*?abcdABCD

        System.out.println("打印经ISO_8859_1重新编码后复现经utf8编码后原文的字节数组: "+ Arrays.toString(t.getBytes(StandardCharsets.ISO_8859_1)));

        String t2 = new String(t.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
        System.out.println("ISO_8859_1复现utf8编码原字节数组进行utf8解码回原文: "+t2);     // 为中华崛起而读书?1234567890!.*?abcdABCD


        String text2 = "为ä¸\u00ADå\u008D\u008Eå´\u009Bèµ·è\u0080\u008C读书ï¼\u009F1234567890!.*?abcdABCD";
        String tt = new String(text2.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
        System.out.println(tt); 

    }
}

中文乱码特征

String text = "为中华崛起而读书?1234567890!.*?abcdABCD";


US_ASCII编码,ISO_8859_1编码,不支持中文和中文符号,任何形式的解码出来的都是 ?
例:?????????1234567890!.*?abcdABCD


**US_ASCII解码  中文和中文符号都是 �������������**


**ISO_8859_1解码  中文和中文符号都是 ΪÖлªáÈÆð¶ø¶ÁÊ飿**


**utf8解码 �和特殊符号居多**
例:Ϊ�л���������飿1234567890!.*?abcdABCD


**GBK 解码 繁体字居多**
涓轰腑鍗庡礇璧疯�岃涔︼紵1234567890!.*?abcdABCD

**UTF_16、UTF_16LE、UTF_16BE解码其他类型大概率会出现很多繁体字和类似韩文字**
解GBK  캪훐뮪웰뛸뛁쫩ꎿㄲ㌴㔶㜸㤰℮⨿慢捤䅂䍄
解utf8  㼿㼿㼿㼿㼱㈳㐵㘷㠹〡⸪㽡扣摁䉃�


**解 UTF_16、UTF_16LE、UTF_16BE编码 乱码一定有 ,这玩意在这识别不了(代替),并且会附带各自的特征,如utf8的� GBK的繁体字 **

�N:N-SN]峸�孄Nf� 1 2 3 4 5 6 7 8 9 0 ! . * ? a b c d A B C D
g¹p`i eYÎÛVb[Oi u T4³~RÑSKbSbÿ1 2 3 4 5 6 7 8 9 0 ! . * ? a b c d A B C D 
��N:N-SN]�w���Nf� 1 2 3 4 5 6 7 8 9 0 ! . * ? a b c d A B C D
N-NNS]w��麐fN�1 2 3 4 5 6 7 8 9 0 ! . * ? a b c d A B C D

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值