java数组乱码_Java 乱码问题
在开发的时候,经常会碰到一个问题,本地无乱码而部署到服务器上后服务器出现了乱码,在此记录下我的解决方法:
一直以来我都有一个误区,一直认为“字节无编码,字符串有编码”,而事实刚好相反,事实上是“字符串无编码,字节有编码”。
不同编码,中文和英文字符所占字节不同,UTF_8是一种变长的编码方式,对英文字符使用单字节编码,对中文字符使用三个字节来编码;而GBK是国家制定的汉字编码标准,使用双子节进行编码,所以不同的编码,将字节转成字符的方式不同。而Java 字符串是由一串字符数组char[]组成,字符是由字节组成,一个中文和一个英文字母都是占一个字符,Java代码在显示String时,需要将字节根据编码(UTF或GBK或其他)转成字符,然后组成字符数组char[]显示,这就是说明了“字符串无编码,字节有编码”。
所以,我们在接收消息时进行编码转码时,需要将接收的消息以该消息的编码方式解码成字符串,然后将字符串以我们需要编码进行编码,即:
byte[] gbkByteArr = 字节流接收消息,获得接收消息字节流数组;
String gbkMsg = new String(gbkByteArr ,"GBK") //用消息的编码进行解码,假如消息编码方式是GBK,此处就用GBK解码; 到此得到的字符串应该就是无乱码的字符串
往往出现乱码不是解码出错,而是认为在得到gbkMsg后无乱码后,Java编码解码就结束了,其实这只是第一步,我们仍需对gbkMsg进行编码,将其转成我们需要的编码。具体如下:
byte[] utf8ByteArr = gbkMsg .getBytes(UTF_8); //如果需要的消息UTF_8,在此将gbkMsg 转成UTF_8的字节数组,在此一定要指定编码方式,不然Java会按JVM设置的编码进行编码,如果JVM未指定编码,会根据当前操作系统的编码指定,不同的服务器上虚拟机JVM或操作系统有可能设置的编码不同,就造成了不同服务器有的出现乱码,有的正常。我就是由于此步骤未设置编码,造成了本地服务器正常,而线上服务器乱码。
Strign utf8Msg = new String(bytes_emt , UTF_8); //获得以UTF_8编码的字节数组utf8ByteArr对应的字符串
总结:针对不同编码的转换(以GBK--转UTF_8为例)方式:
1、先将消息以字节流方式获取,获得字节数组byte[] gbkByteArr ;
2、将字节以“GBK”的方式解码,获得字符串gbkMsg
3、将字符串gbkMsg 以“UTF_8”的方式编码,获得编码是UTF_8的字节流byte[] utf8ByteArr
4、然后将字节流utf8ByteArr以UTF_8的方式转成字符串
java数组乱码_Java 乱码问题相关推荐
- java 数组 反射_java数组的反射
java数组的反射,有一个JAVA API类可以运用:java.lang.reflect.Array 具体应用: 1:判断一个对象是否是数组: int arr[] = {1,2,3}; Class c ...
- java数组缓冲_java – 何时使用数组,缓冲区或直接缓冲区
题 在编写用于OpenGL库的Matrix类时,我遇到了使用Java数组或Buffer策略来存储数据的问题(JOGL为Matrix操作提供直接缓冲区副本).为了分析这一点,我写了一个小型性能测试程序, ...
- Java数组参考_Java数组
数组变量 VS 数组对象 先看一例子: int[] primitiveArray; //在栈中声明了一个引用变量,暂时还没指向任何对象 primitiveArray = new int[5]; //在 ...
- java 数组写法_java书写、数据类型、数组定义
这里只记录java与php.javascript不同的地方,相同的地方就不赘述了. 1.java文件源码为以.java为后缀的文件,字节码文件是以.class为后缀的文件. 2.写好一个java源码之 ...
- java数组 方法_Java数组的十大方法
Java数组的十大方法 以下是Java Array的前10种方法.他们是来自stackoverflow的投票最多的问题. 0.声明一个数组 String[] aArray = new String[5 ...
- java 数组效率_java数组复制的四种方法效率对比
有关数组的基础知识,有很多方面,比方说初始化,引用,遍历,以及一维数组和二维数组,今天我们先看看数组复制的有关内容. 来源于牛客网的一道选择题: JAVA语言的下面几种数组复制方法中,哪个效率最高? ...
- java 数组成员_java 数组中含有
<数据结构与抽象:Java语言描述(原书第4版)>一2.2.1 可变大小数组 本节书摘来华章计算机<数据结构与抽象:Java语言描述(原书第4版)>一书中的第2章 ,第2.2. ...
- java 数组 指针_java指针数组的使用
1,一直都在学java是没有指针的,让我纠结的是java指针确实是存在的,java数组就是真正的指针. 以为C语言老师说过C语言里数组就是指针,但是我感觉这句话用在C语言里不是很严谨,而用在java里 ...
- java 数组删除_Java数组删除指定元素的方法(按数组角标删除)
Java最有效的删除数组指定元素的方法,应该属于这一种形式,下面是Java数组按角标删除数据的工具类,代码如下:public static byte[] removeTheElement(byte[] ...
- java数组更新_java数组
数组无论在哪种编程语言中都算是最重要的数据结构之一,同时不同语言的实现及处理也不尽相同.但凡写过一些程序的人都知道数组的价值及理解数组的重要性,与链表一道,数组成为了基本的数据结构.尽管Java提供了 ...
最新文章
- java的static关键字
- PNAS:微生物组分析揭示人类皮肤的独特性
- IIS6的PHP最佳配置方法
- concat mysql sql注入_sql注入-mysql注入基础及常用注入语句
- 在家办公的第一天,钉钉、企业微信集体“崩溃”...
- Squid在企业中的应用
- barbuttonitem 文字换行_IOS TableView的Cell高度自适应,UILabel自动换行适应
- 从 github 执行 git clone 一个大的项目时提示 error: RPC failed
- 四则运算2的单元测试
- 无人车火了 百度是如何做到的?
- 一看就会的 GitHub 骚操作,让你看上去像一位开源大佬
- Python 标准库 —— urllib(下载进度)
- windows进行udp端口转发
- AWS云上混沌工程实践之启动篇
- 怎样搜索计算机中docx格式的文件,如何打开docx文件 打开docx文件方法
- Node.js从入门到精通
- golang之jsonb类型的支持
- 四川省评高级教师考职称计算机,四川省中学教师中、高级职称评审条件
- 如何更快地渲染?深入了解3D渲染性能的指南!(5)
- Android 连接wifi 检测是否需要portal 认证