问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java中文乱码,能说下string.getBytes()和new String()转码是,具体点...

发布网友 发布时间:2022-04-23 13:49

我来回答

6个回答

热心网友 时间:2022-04-18 22:24

1、Java中,【String.getBytes(String decode)】的方法,会根据指定的decode,编码返回某字符串在该编码下的byte数组表示,例如:

byte[] b_gbk = "中".getBytes("GBK");
byte[] b_utf8 = "中".getBytes("UTF-8");
byte[] b_iso88591 = "中".getBytes("ISO8859-1")

上面三行代码表示:分别返回“中”这个汉字在GBK、UTF-8和ISO8859-1编码下的byte数组表示,此时b_gbk的长度为2,b_utf8的长度为3,b_iso88591的长度为1。

2、而通过【new String(byte[], decode)】的方式来还原这个“中”字时,实际是使用decode指定的编码来将byte[ ]解析成字符串,例如:

String s_gbk = new String(b_gbk,"GBK");
String s_utf8 = new String(b_utf8,"UTF-8");
String s_iso88591 = new String(b_iso88591,"ISO8859-1");

s_gbk和s_utf8都是“中”,而只有s_iso88591是一个不认识 的字符,因为ISO8859-1编码的编码表中,根本就没有包含汉字字符,当然也就无法通过"中".getBytes("ISO8859-1")。

因此,通过【String.getBytes(String decode)】方法来得到byte[ ]时,要确定decode的编码表中确实存在String表示的码值,这样得到的byte[ ]数组才能正确被还原。

扩展资料

java中文编码避免乱码

1、为了让中文字符适应某些特殊要求(如http header头要求其内容必须为iso8859-1编码),可能会通过将中文字符按照字节方式来编码的情况,比如:

String s_iso88591 = new String("中".getBytes("UTF-8"),"ISO8859-1")

2、上述例子中的s_iso8859-1字符串实际是三个在 ISO8859-1中的字符,在将这些字符传递到目的地后,目的地程序再通过相反的方式:

String s_utf8 = new String(s_iso88591.getBytes("ISO8859-1"),"UTF-8")

来得到正确的中文汉字。这样就既保证了遵守协 议规定、也支持中文。

3、String.getBytes(String decode)方法会根据指定的decode编码返回某字符串在该编码下的byte数组表示这里是encode ,not decode,从字符串到字节数组是编码的过程,从字节数组到字符串(即 new String(byte[] , charsetname))才是解码的过程。

参考资料:百度百科-UTF-8

热心网友 时间:2022-04-18 23:42

首先要看你系统本来默认是什么编码方式的了这很重要。
在.java中声明的String变量的字符编码,是与当前文本编辑器使用的字符编码一致

例如,在MyEclipse中,我设置的默认编码为GBK
系统数据依照gbk的编码方式。使用str.getBytes("gbk")把数据还原(这点很重要),
然后利用new String(str.getBytes("gbk"), "utf-8")把数据从gb2312转换成utf-8
所以要清楚知道str.getBytes("gbk")这里的str字符本来是不是gbk编码的很重要,如果它是iso8859-1呢,那就会出错了。也许你不小心弄混了。就会时对时错了。
注意:
在.java中声明的String变量的字符编码,是与当前文本编辑器使用的字符编码一致
例如,在MyEclipse中,我设置的默认编码为GBK
则字符就是gbk编码格式。

热心网友 时间:2022-04-19 01:17

第一个是把字符串重新编码,是一个字节一个字节的重新编码。第二个是创建一个新的字符串。

热心网友 时间:2022-04-19 03:08

getBytes是使用平台默认的编码将字符串编码成byte[].

热心网友 时间:2022-04-19 05:16

new String(str.getBytes("gbk"), "utf-8")

热心网友 时间:2022-04-19 07:41

new String(str.getBytes("gbk"), "utf-8")这样会报错,编码和解码不一样
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
女生多大后可以不在长身高? 如何不用软件把手机投屏到电脑上手机屏幕怎样投放到电脑上 战时拒绝、故意延误军事订货罪既遂的处罚? 战时故意延误军事订货罪处罚标准 名师1+1导读方案:汤姆·索亚历险记目录 三星sm-g7200打开微信慢,无法正常收看,网速不慢。 笔记本电脑如何调亮屏幕亮度 大伙说说洗衣机要不要带烘干好 热烘干洗衣机怎么样 ef英语哪个好 中国排名前十名的大山有哪些 中国十大名山排名榜 中国名山排名前十 中国名山排名是怎样的? 微信公众账号有什么功能? 中国十大高山海拔排名 微信公众号怎么创建功能栏目?? 微信公众号 里面 这个功能怎么设置的? 信用卡逾期4天会影响征信吗 招商银行逾期2天会上征信吗? 招商银行逾期四天上征信吗? 招商银行逾期4天影响征信吗? 招商银行信用卡逾期四天会有影响吗 在手机上如何看u盘? 我招行信用卡忘记还款,逾期了几天,会影响个人信用记录吗?谢谢! 招行晚5天还款会上征信吗? 招行信用卡逾期4天对个人征信有影响吗? 怎么用手机打开优盘 招商信用卡账单日超过了3天还款,会不会上征信! 招行晚还款五天,会不会上征信? 中国名山海拔高度排名 java string乱码问题 中国排名前十的名山有哪些 java中文string 乱码如果不正则直接System.in.read(by)可以往文件写入中文可是我想进行匹配就要经过String c语言string出现乱码 函数返回值为String型时,且返回结果为中文时,得到的结果是乱码,这是怎么回事? 中国名山 排名 android中android:text="@string/请输入"中文乱码怎么办 中国的名山大川排名 读取xml文件获取String字符串为乱码,怎么解决 中国著名的山有哪些? javascript 字符串 String 初级问题 中文乱码 中国有几大名山? nsstring中文有乱码怎么解决? 中国最美的十大名山(最新排名是什么) C++ string输出乱码问题 String[]数组输出乱码? java String.substring 乱码 C++ STRING 中文问题 java中的输出string字符串,是乱码