首先常用的byte[]直接转String很简单:
public static void main(String[] args) { String str="我是中国人"; byte[] arr=str.getBytes(); System.out.println("打印:"+arr); for(byte e : arr) { System.out.print(e + " "); } String str2=new String(arr); System.out.println("\n打印2:"+str2); }
java相关视频推荐:java学习
比如上面这个,输出的结果是:
打印:[B@15db9742 -50 -46 -54 -57 -42 -48 -71 -6 -56 -53 打印2:我是中国人
看到这个就知道编码了。byte是一个字节,汉字是两个字节。所以五个汉字要十个byte类型的数字存储。然后数字变成汉字,这中间就是走了一个编码规范的过程。
那么java中是如何处理字符编码的?
JAVA使用自己的String类,并且String类对象是不需要指定编码表的!为什么它会自己知道一堆数字各代表什么字符呢?就是因为String里的字符信息是用UNICODE编码存放的。而JAVA为了表示字符(注意是单个字符),也有char这个数据类型,而且他的大小是固定2个8位16进制数字长度,也就是0~65535。为的就是对应UNICODE里面的一个字符。
大家如果想取一个String里的按UNICODE数字,可以用getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)
方法取得一个char[],这个char[]里就是表示String字符的,按UNICODE编码表编码的数字。
为什么会出现byte[ ]转String又会出现乱码现象?
很显然,就是上面提到的,编码规范不一样。举个栗子,比如GB2312规范的中文“当”字,就是用0xB5,0xB1这两个八位的数字来表示的。在英文系统上,没有GB2312编码表,给他一个0xB5,0xB1,他就傻傻的当作ASCII来处理。放到Java里,他又会按照自己的UNICODE规范来处理,所以规范不一样,就会出现奇怪的结果,也就是乱码。
那么我们怎么解决byte[ ]转String的乱码问题呢?
得看byte[]来自哪里了。时常会遇到,要把一张图片转为byte[]然后在转为String流对象传输到别的地方,接收者再转为byte[]再变成图片。
1、直接传输byte[]的话,会出现byte[]过长数据丢失。因为不是所有的byte组合都可以映射成char。
2、用常见的Base64编码规范吧。base64的编码规范就是将常见的字符转换成6位二进制表示(常用64个所以叫base64吧)。怎么写,有现成的工具类哦如下:
import org.apache.commons.codec.binary.Base64; public class UtilHelper { //base64字符串转byte[] public static byte[] base64String2ByteFun(String base64Str){ return Base64.decodeBase64(base64Str); } //byte[]转base64 public static String byte2Base64StringFun(byte[] b){ return Base64.encodeBase64String(b); } }
这样就可以保证byte[]和String之间的标准转换了。
更多相关文章教程推荐:java零基础入门
Atas ialah kandungan terperinci java中byte[]转String出现乱码. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Artikel ini membincangkan pelbagai algoritma pengumpulan sampah Java (Serial, Selari, CMS, G1, ZGC), kesan prestasi mereka, dan kesesuaian untuk aplikasi dengan timbunan besar.

Artikel ini membincangkan Mesin Maya Java (JVM), yang memperincikan peranannya dalam menjalankan program Java di seluruh platform yang berbeza. Ia menerangkan proses dalaman JVM, komponen utama, pengurusan memori, pengumpulan sampah, dan pengoptimuman prestasi

Enjin Nashorn Java membolehkan skrip JavaScript dalam aplikasi Java. Langkah -langkah utama termasuk menubuhkan Nashorn, mengurus skrip, dan mengoptimumkan prestasi. Isu utama melibatkan keselamatan, pengurusan ingatan, dan keserasian masa depan kerana deprec Nashorn

Sumber-sumber cuba Java memudahkan pengurusan sumber dengan menutup sumber secara automatik seperti aliran fail atau sambungan pangkalan data, meningkatkan kebolehbacaan kod dan penyelenggaraan.

Java Enums mewakili set nilai tetap, menawarkan keselamatan jenis, kebolehbacaan, dan fungsi tambahan melalui kaedah dan pembina tersuai. Mereka meningkatkan organisasi kod dan boleh digunakan dalam penyataan suis untuk pengendalian nilai yang cekap.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Penyesuai Pelayan SAP NetWeaver untuk Eclipse
Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

Muat turun versi mac editor Atom
Editor sumber terbuka yang paling popular

ZendStudio 13.5.1 Mac
Persekitaran pembangunan bersepadu PHP yang berkuasa

VSCode Windows 64-bit Muat Turun
Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa