java编码问题,GBK转化为UTF-8
问题是这样的,向接口发送了一个请求,接口返回一串字符串S这个字符串编码格式为utf-8我系统中使用的编码格式为GBK,导致出错。s=newString(s.getByte...
问题是这样的,向接口发送了一个请求,接口返回一串字符串S 这个字符串编码格式为utf-8
我系统中使用的编码格式为GBK,导致出错。
s=new String(s.getBytes("gbk"),"utf-8");
这样处理完以后,字符串S中,部分编码正确,部分编码不正确
中华人民共和??213123
正常应该是中华人民共和国1213123
具体怎么解决呢
换成大写的GBK跟UTF-8还是不行。。。哎。 展开
我系统中使用的编码格式为GBK,导致出错。
s=new String(s.getBytes("gbk"),"utf-8");
这样处理完以后,字符串S中,部分编码正确,部分编码不正确
中华人民共和??213123
正常应该是中华人民共和国1213123
具体怎么解决呢
换成大写的GBK跟UTF-8还是不行。。。哎。 展开
21个回答
展开全部
首先理解java的字符概念
java中字符串是字符的序列,虚拟机内部的字符都是16位的unicode字符,等价于C++中的WCHAR,也是为了实现虚拟机方便
WCHAR叫做宽字符,对应的MuitiChar叫做多字符,这种多字符中字符的位数不唯一
GBK 和 UTF8 是多字符的不同编码形式
s=new String(s.getBytes("gbk"),"utf-8");
的意思是:
byte[] bytes=s.getBytes("gbk");
s=new String(bytes,"utf-8");
第一句是将s对应的gbk编码转出来,形成一个字节流
第二句是将这个字节流按照utf-8编码转为java字符串,因此相当于将gbk编码的字节流当做utf-8来使用,这样在中文中会出现乱码
你的问题是,接口返回的已经是utf-8 所以它必须是byte[] 流,如果是字符串的话就不好办了
java中字符串是字符的序列,虚拟机内部的字符都是16位的unicode字符,等价于C++中的WCHAR,也是为了实现虚拟机方便
WCHAR叫做宽字符,对应的MuitiChar叫做多字符,这种多字符中字符的位数不唯一
GBK 和 UTF8 是多字符的不同编码形式
s=new String(s.getBytes("gbk"),"utf-8");
的意思是:
byte[] bytes=s.getBytes("gbk");
s=new String(bytes,"utf-8");
第一句是将s对应的gbk编码转出来,形成一个字节流
第二句是将这个字节流按照utf-8编码转为java字符串,因此相当于将gbk编码的字节流当做utf-8来使用,这样在中文中会出现乱码
你的问题是,接口返回的已经是utf-8 所以它必须是byte[] 流,如果是字符串的话就不好办了
展开全部
乱码问题不能只丛编码转化来解决,要从根源上解决! 一般都是用UTF-8编码!大致要分为3个步骤:
1:页面上要指定编码格式: <%@ page language = "java" contentTpye = "text/html; charset = UTF-8" pageEncoding = "UTF-8" %>
2: 工作空间指定编码格式 :WINDOWS --〉首选项 (pREFERENCES)--> General --->workspace 下 有一个 Text file encodeing 的区块 默认的是 GB18030 要选择other 值为 UTF-8; 旁边的 new text file line delimiter 也可以设置 选择other 值为 UTF-8,最好是默认Default.
3: 数据库的编码格式 最好也设置成UTF-8! 具体操作可询问dba ,或者上网查资料。
1:页面上要指定编码格式: <%@ page language = "java" contentTpye = "text/html; charset = UTF-8" pageEncoding = "UTF-8" %>
2: 工作空间指定编码格式 :WINDOWS --〉首选项 (pREFERENCES)--> General --->workspace 下 有一个 Text file encodeing 的区块 默认的是 GB18030 要选择other 值为 UTF-8; 旁边的 new text file line delimiter 也可以设置 选择other 值为 UTF-8,最好是默认Default.
3: 数据库的编码格式 最好也设置成UTF-8! 具体操作可询问dba ,或者上网查资料。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-01-10
展开全部
s是utf-8格式的,你用s.getBytes("gbk")就存在问题,有的不能转过来,所以你该这样s=new String(s.getBytes(),"utf-8");或s=new String(s.getBytes("utf-8"));这样就对了,这样得到的是正确的UTF-8,如果要最终转换成GBK,s=new String(s.getBytes("utf-8"), “gbk”);就可以啦
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我理解是你写反了:
s=new String(s.getBytes("utf-8"),"gbk");
还有就是,请检查你直接用GBK格式输出看看对端给你的是否正确。也就是说先判断来源是否OK,再判断处理的是否OK
s=new String(s.getBytes("utf-8"),"gbk");
还有就是,请检查你直接用GBK格式输出看看对端给你的是否正确。也就是说先判断来源是否OK,再判断处理的是否OK
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个问题我之前回答过:http://zhidao.baidu.com/question/1301912846509946579.html?oldq=1
s=new String(s.getBytes("gbk"),"utf-8");
这种写法是错误的,要么
s=new String(s.getBytes("gbk"),"gbk");
要么
s=new String(s.getBytes("utf-8"),"utf-8");
另外请确认s原来的编码到底是什么是gbk,还是uft-8,如果原来s可以正常输出的话(应该不可能,不然就不会转码了),那就直接采用上面两种做法就可以了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询