「java传输编码」java常用编码
今天给各位分享java传输编码的知识,其中也会对java常用编码进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、java中GBK编码格式转成UTF8,用一段方法实现怎么做
- 2、java编码问题,GBK与UTF-8转换
- 3、java web在Linux上传输的乱码的求解
- 4、java socket 传输编码问题
- 5、java怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串
- 6、java如何设置表单提交传递中文参数变量编码
java中GBK编码格式转成UTF8,用一段方法实现怎么做
首先明确几点:
unicode是一种“编码”,所谓编码就是一个编号(数字)到字符的一种映射关系,就仅仅是一种一对一的映射而已,可以理解成一个很大的对应表格
GBK、UTF-8是一种“编码格式”,是用来序列化或存储1中提到的那个“编号(数字)”的一种“格式”;GBK和UTF-8都是用来序列化或存储unicode编码的数据的,但是分别是2种不同的格式; 他们俩除了格式不一样之外,他们所关心的unicode编码范围也不一样,utf-8考虑了很多种不同国家的字符,涵盖整个unicode码表,所以其存储一个字符的编码的时候,使用的字节长度也从1字节到4字节不等;而GBK只考虑中文——在unicode中的一小部分——的字符,的编码,所以它算好了只要2个字节就能涵盖到绝大多数常用中文(2个字节能表示6w多种字符),所以它存储一个字符的时候,所用的字节长度是固定的;
上述2个概念不懂的请马上google,下面不再赘述;我下面说说这个问题本身...的问题在哪里
首先java的string使用的编码是unicode,但是,当string存在于内存中时(也就是当程序运行时、你在代码中用string类型的引用对它进行操作时、也就是string没有被存在文件中且也没有在网络中传输(序列化)时),是“只有编码而没有编码格式的”,所以java程序中的任何String对象,说它是gbk还是utf-8都是错的,gbk和utf-8是编码格式而不是编码,String在内存中不需要“编码格式”(记住编码格式是在存文件或序列化的时候使用的), 它只是一个unicode的字符串而已
所以java里面String是不带编码格式的,而String.toByteArray(charsetName)得到的byteArray是带编码格式的,格式就是你传入的'charsetName',我们不妨把toByteArray的这个过程叫做“编码”;另外,new String(byte[], charsetName)是把一个byte数组(带编码格式)以charsetName指定的编码格式翻译为一个不带编码格式的String对象,我们不妨把这个过程叫“解码”
那么根据我揣测提问者的意图,可能有2种问法是他真正想问的:
第一,如何把一个被错误地当作是gbk格式存储的utf-8格式的文件里面读出来的一段乱码字符串还原回去(也就是说本来二进制数据是utf-8的,你用gbk来解码它,得到的字符串是乱码,现在想要还原回去)
第二种,如何把一个gbk文件转化为utf-8文件
如果是第一种意图那就:
public static void main(String... args) throws Throwable {
String errStr = "errStr";
System.out.println(recover(errStr));
}
public static String recover(String str) throws Throwable {
return new String(str.getBytes("GBK"), "UTF-8");
}
其中errStr就是乱码字符串,按照相反的顺序在编码(用gbk)、解码(用utf-8)回去,就能得到正确的字符串(其实不保证所有情况均能正确还原,只能说大部分都能,要看你在乱码过程中是否有数据被丢失)
如果是第二种意图,那就用InputStream以gbk格式将文件读到内存里(表示为String),再将这个String以UTF-8编码写入目标文件里,具体请参考InputStream/OutputStream的api
java编码问题,GBK与UTF-8转换
这样转法当然不行啦。首先你要理解编码的含义:
用语言举个例子:
用英文跟中文表达“车这个概念,英文是Car,中文是车。
作为一个会英语的中国人,看到Car当然就能理解成“车”,而当他已经理解表达的意思是“车”,无论他用英文表达还是用中文表达都能正确地表达出来。
但是如果一个不会英语的中国人,看到Car就不能理解成“车”,所以不能用英文跟这个人沟通。
编码也是如此
当你的软件已经知道自己想要表达什么(s就是"车"这个概念),那么只需要用指定的编码(哪种语言,s.getBytes("xxx"))表达出来就可以了。你上面的做法就像是把Car硬要理解成中文,当然就乱码了。
当然这里用语言沟通指的是字节流(byte),是二进制传输。
首先,你的XML头必须写成GBK
?xml version="1.0" encoding="GBK"?
然后要看你用什么方式传输这个XML报文:
如果是以HTTP报文参数来传输的话,就必须把XML报文用URLEncoder去encode,这样中文会转换成%NN%这种东西,全是英文的就跟编码没什么太大关系了。
如果是以流的方式传输的话,就要做编码了,用一个BufferedWriter封装一个OutputStreamWriter再封装OutputStream就可以实现了
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out, "GBK"));
writer.write(s,0,s.length());
writer.flush;
或者你也可以先把XML转换成字节数组,再拆包传输
byte[] byteArray = s.getBytes("GBK");
java web在Linux上传输的乱码的求解
你本地和LINUX的编码不一致所导致的乱码
解决如下:
1、设置request的编码 new String(request.getParameter("参数名").getBytes("iso-8859-1"), "gbk");
将默认的iso-8859-1转为gbk 不行的话就多换几种编码
2、设置LINUX的编码
命令行敲入:vi /etc/sysconfig/i18n 修改为以下内容
#LANG="zh_CN.UTF-8"
#SUPPORTED="zh_CN.UTF-8:zh_CN:zh"
#SYSFONT="latarcyrheb-sun16"
#LANG="en_US.UTF-8"
#SUPPORTED="en_US.UTF-8:en_US:en"
#SYSFONT="latarcyrheb-sun16"
LANG="zh_CN.GB18030"
LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
SUPPORTED="zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en"
SYSFONT="lat0-sun16"
export LC_ALL="zh_CN.GB18030"
建议如上 不喜勿喷
java socket 传输编码问题
java是unicode编码。一个字符是2位,十六个字节,c在本地的话,他会用本地的默认字符集,也就是gb2312或者gbk编码,这个编码是浮动的,8个或者12个,2着字符不兼容呀,解决就不知道了,我一般都是在client和server都用java的
java怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串
通过JDK1.6知道String类中getBytes(”编码“)方法可以讲一个数用指定的编码转成一个字节数组,String中通过指定的 charset解码指定的 byte 数组,构造一个新的 String。代码如下:
try{
String s = "java学习";
System.out.println(s);
String result = new String(s.getBytes("GB2312"),"iso-8859-1");
System.out.println(s);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
扩展资料:
getBytes() 方法有两种形式:
1、getBytes(String charsetName): 使用指定的字符集将字符串编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
2、getBytes(): 使用平台的默认字符集将字符串编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
参考资料:
百度百科-getBytes()
java如何设置表单提交传递中文参数变量编码
通常页面是按UTF-8传递,就不会乱码的
form
method="post"
enctype
application/x-www-form-urlencoded 表单数据被编码成“名字/值”对,类似于URI查询字符串。这是POST的默认格式。
multipart/form-data
表单数据被编码成多部分MIME消息。如果把文件上传到服务器,使用的是这种格式。
还可以在递交前使用JS进行编码escape、encodeURI() 、
encodeURIComponent()
还可以设置浏览器,如发送时按UTF-8。
java传输编码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java常用编码、java传输编码的信息别忘了在本站进行查找喔。
发布于:2022-11-29,除非注明,否则均为
原创文章,转载请注明出处。