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还是不行。。。哎。
展开
 我来答
lif12347
推荐于2017-10-07 · TA获得超过305个赞
知道小有建树答主
回答量:768
采纳率:50%
帮助的人:219万
展开全部
首先理解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[] 流,如果是字符串的话就不好办了
百度网友37c9a41
2014-01-11 · 超过11用户采纳过TA的回答
知道答主
回答量:38
采纳率:0%
帮助的人:24.6万
展开全部
乱码问题不能只丛编码转化来解决,要从根源上解决! 一般都是用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 ,或者上网查资料。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
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”);就可以啦
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fangliangliang
2014-01-10 · TA获得超过1624个赞
知道小有建树答主
回答量:767
采纳率:0%
帮助的人:652万
展开全部
我理解是你写反了:
s=new String(s.getBytes("utf-8"),"gbk");

还有就是,请检查你直接用GBK格式输出看看对端给你的是否正确。也就是说先判断来源是否OK,再判断处理的是否OK
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
每天学点Java
2014-01-11 · TA获得超过5938个赞
知道大有可为答主
回答量:3547
采纳率:0%
帮助的人:1345万
展开全部

这个问题我之前回答过: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可以正常输出的话(应该不可能,不然就不会转码了),那就直接采用上面两种做法就可以了

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(19)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式