解决java中文乱码,编码识别测试,汇总

 

1.手机显示中文:GBK,UTF-8正常,ISO-8859-1乱码。

2.写入内容到txt:UTF-8转GBK,直接stream.write(str.getBytes(StrCharset.GBK));无效。

发现前面多了个问号?,直接删。暂时这样处理了。

                if(StrCharset.getEncoding(str).equals(StrCharset.ISO_8859_1))
                    stream.write(str.getBytes(StrCharset.ISO_8859_1));
                else if(StrCharset.getEncoding(str).equals(StrCharset.UTF_8))
                {
                    try{
                    byte[] b=str.getBytes(StrCharset.GBK);
                    stream.write(b,1,b.length-1);
                    //stream.write(new String(str.getBytes("GBK"),"GBK").getBytes());
                    }catch(Exception e)
                    {
                        stream.write(str.getBytes(StrCharset.GBK));
                    }
                }
                else
                    stream.write(str.getBytes(StrCharset.GBK));
import java.nio.charset.Charset;
 
public class Encoding
{
    public static String getEncoding(String str) 
    {    
        String encode;
        
    encode = "UTF-16";           
        try 
    {    
            if(str.equals(new String(str.getBytes(), encode))) 
        {   
                return encode;    
            }    
        } 
    catch(Exception ex) {} 
        
    encode = "ASCII";    
        try 
    {    
            if(str.equals(new String(str.getBytes(), encode)))
        {    
                return "字符串<< " + str + " >>中仅由数字和英文字母组成,无法识别其编码格式";    
            }    
        } 
    catch(Exception ex) {}    
        
    encode = "ISO-8859-1";    
        try 
    {    
            if(str.equals(new String(str.getBytes(), encode))) 
        {    
                return encode;    
            }    
        } 
    catch(Exception ex) {}    
        
    encode = "GB2312";    
        try 
    {    
            if(str.equals(new String(str.getBytes(), encode))) 
        {    
                return encode;    
            }    
        } 
    catch(Exception ex) {} 
        
    encode = "UTF-8";    
        try 
    {    
            if(str.equals(new String(str.getBytes(), encode))) 
        {    
                return encode;    
            }    
        } 
    catch(Exception ex) {}    
        
        /*
     *......待完善
     */
        
        return "未识别编码格式";    
    }  
 
    public static void main(String[] args)
    {
    //获取系统默认编码
    System.out.println("系统默认编码:" + System.getProperty("file.encoding")); //查询结果GBK
    //系统默认字符编码
    System.out.println("系统默认字符编码:" + Charset.defaultCharset()); //查询结果GBK
    //操作系统用户使用的语言
    System.out.println("系统默认语言:" + System.getProperty("user.language")); //查询结果zh
        
    System.out.println();
        
    String s1 = "hi, nice to meet you!";
    String s2 = "hi, 我来了!";
        
    System.out.println(getEncoding(s1));
    System.out.println(getEncoding(s2));
    }
}

测试结果
 

 

    // java获取字符串编码格式
    public static String getEncoding(String str) {
        String encode = "GB2312";
        try {
            if (str.equals(new String(str.getBytes(encode), encode))) { // 判断是不是GB2312
                String s = encode;
                return s; // 是的话,返回“GB2312“,以下代码同理
            }
        } catch (Exception exception) {
        }
        encode = "ISO-8859-1";
        try {
            if (str.equals(new String(str.getBytes(encode), encode))) { // 判断是不是ISO-8859-1
                String s1 = encode;
                return s1;
            }
        } catch (Exception exception1) {
        }
        encode = "UTF-8";
        try {
            if (str.equals(new String(str.getBytes(encode), encode))) { // 判断是不是UTF-8
                String s2 = encode;
                return s2;
            }
        } catch (Exception exception2) {
        }
        encode = "GBK";
        try {
            if (str.equals(new String(str.getBytes(encode), encode))) { // 判断是不是GBK
                String s3 = encode;
                return s3;
            }
        } catch (Exception exception3) {
        }
        return "unknown"; // 如果都不是,说明输入的内容不属于常见的编码格式。
    }
各种编码都显示出去看看

        System.out.println("中文");
 
        System.out.println("中文".getBytes());
 
        System.out.println("中文".getBytes("GB2312"));
 
        System.out.println("中文".getBytes("ISO8859_1"));
 
        System.out.println(new String("中文".getBytes()));
 
        System.out.println(new String("中文".getBytes(), "GB2312"));
 
        System.out.println(new String("中文".getBytes(), "ISO8859_1"));
 
        System.out.println(new String("中文".getBytes("GB2312")));
 
        System.out.println(new String("中文".getBytes("GB2312"), "GB2312"));
 
        System.out.println(new String("中文".getBytes("GB2312"), "ISO8859_1"));
 
        System.out.println(new String("中文".getBytes("ISO8859_1")));
 
        System.out.println(new String("中文".getBytes("ISO8859_1"), "GB2312"));
 
        System.out.println(new String("中文".getBytes("ISO8859_1"), "ISO8859_1"));
 

//判断当前字符串的编码格式
if(destination.equals(new String(destination.getBytes("iso8859-1"), "iso8859-1")))
{
  destination=new String(destination.getBytes("iso8859-1"),"utf-8");
}
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值