博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
解决java中文乱码,编码识别测试,汇总
阅读量:2390 次
发布时间:2019-05-10

本文共 4216 字,大约阅读时间需要 14 分钟。

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");}

 

转载地址:http://tcaab.baihongyu.com/

你可能感兴趣的文章
ABAP正则表达式 vs SPLIT INTO
查看>>
使用JDBC操作SAP云平台上的HANA数据库
查看>>
如何提高后台服务应用问题的排查效率?日志 VS 远程调试
查看>>
另一种方式实现事务码SE16里的结果集修改
查看>>
机器学习在销售报价单的产品推荐场景中的作用
查看>>
CRM中间件里的发布-订阅者模式
查看>>
为什么有的系统的事务码BSP_WD_CMPWB看不见Enhance Component这个按钮
查看>>
CRM product UI里assignment block的显示隐藏逻辑
查看>>
使用SAP云平台 + JNDI访问Internet Service
查看>>
如何在Chrome development tool里查看C4C前台发送的请求细节
查看>>
微信小程序开发系列四:微信小程序之控制器的初始化逻辑
查看>>
微信小程序开发系列教程三:微信小程序的调试方法
查看>>
01串排序(stl set使用)
查看>>
KMP算法实现
查看>>
KMP实现(二)
查看>>
C++要点(五)-多重继承和虚继承
查看>>
中缀表达式转后缀表达式并计算后缀表达式的值...
查看>>
有序链表的合并(递归实现)
查看>>
什么是程序员的优秀品质?
查看>>
咋想...
查看>>