有没有做过Java的UTF-8编码转GBK的方法,高分求

问题描述

有没有做过Java的UTF-8编码转GBK?我遇到一个问题要将UTF-8编码转GBK。在网上一直没有找到,找来找去只找到一个GBK2utf-8方法。大家有没有人写过,请赐教。谢谢高分谢谢首先说下newString(tmp.getBytes("ISO-8859-1"),"UTF-8")或者newString(tmp.getBytes("ISO-8859-1"),"GBK")newString(tmp.getBytes("GBK"),"UTF-8")这些方法是解决不了的。我在网上找到的Gbk2Utf8的方法,大家谁能按照这个写个反向的??---------------------------------------------------publicclassCharacterEncodeConverter{publicstaticvoidmain(String[]args){try{CharacterEncodeConverterconvert=newCharacterEncodeConverter();byte[]fullByte=convert.gbk2utf8("中文");StringfullStr=newString(fullByte,"UTF-8");System.out.println("stringfromGBKtoUTF-8byte:"+fullStr);}catch(Exceptione){e.printStackTrace();}}/***//***Gbk2utf8.**@paramchenesethechenese**@returnthebyte[]*/publicbyte[]gbk2utf8(Stringchenese){//Step1:得到GBK编码下的字符数组,一个中文字符对应这里的一个ccharc[]=chenese.toCharArray();//Step2:UTF-8使用3个字节存放一个中文字符,所以长度必须为字符的3倍byte[]fullByte=newbyte[3*c.length];//Step3:循环将字符的GBK编码转换成UTF-8编码for(inti=0;i<c.length;i++){//Step3-1:将字符的ASCII编码转换成2进制值intm=(int)c;Stringword=Integer.toBinaryString(m);System.out.println(word);//Step3-2:将2进制值补足16位(2个字节的长度)StringBuffersb=newStringBuffer();intlen=16-word.length();for(intj=0;j<len;j++){sb.append("0");}//Step3-3:得到该字符最终的2进制GBK编码//形似:1000001001111010sb.append(word);//Step3-4:最关键的步骤,根据UTF-8的汉字编码规则,首字节//以1110开头,次字节以10开头,第3字节以10开头。在原始的2进制//字符串中插入标志位。最终的长度从16--->16+3+2+2=24。sb.insert(0,"1110");sb.insert(8,"10");sb.insert(16,"10");System.out.println(sb.toString());//Step3-5:将新的字符串进行分段截取,截为3个字节Strings1=sb.substring(0,8);Strings2=sb.substring(8,16);Strings3=sb.substring(16);//Step3-6:最后的步骤,把代表3个字节的字符串按2进制的方式//进行转换,变成2进制的整数,再转换成16进制值byteb0=Integer.valueOf(s1,2).byteValue();byteb1=Integer.valueOf(s2,2).byteValue();byteb2=Integer.valueOf(s3,2).byteValue();//Step3-7:把转换后的3个字节按顺序存放到字节数组的对应位置byte[]bf=newbyte[3];bf[0]=b0;bf[1]=b1;bf[2]=b2;fullByte[i*3]=bf[0];fullByte[i*3+1]=bf[1];fullByte[i*3+2]=bf[2];//Step3-8:返回继续解析下一个中文字符}returnfullByte;}}

最终的测试结果是正确的:stringfromGBKtoUTF-8byte:中文。

解决方案

解决方案二:
newString(tmp.getBytes("ISO-8859-1"),"GBK")这个都不行吗??如果你是web的话看看你的页面设置以及数据库设置,还是不行的话尝试着用post传值的方式看看,还是不行,看看你的浏览器的编码方式是什么方式,水平有限,期待高手
解决方案三:
不好意思,没太看懂你的需求。你给的代码不能通过编译。改了一处错误后能跑了,但是发现,这个代码根本没什么意思。比方说,将你main方法中的这行代码引用楼主clz1314521的回复:

byte[]fullByte=convert.gbk2utf8("中文");

改成byte[]fullByte="中文".getBytes("UTF-8");程序运行结果不受影响。那这个程序这么多代码,不就是个getBytes("UTF-8")就能完成的功能么?你说的逆向转换,是什么意思?
解决方案四:
感觉没有充分理解楼主的需求,楼主能否将需求再补充一下,我也想学习一下,谢谢。
解决方案五:
java.net.URLEncoderjava.net.URLDecoder这两个类应该就够用了
解决方案六:
其实楼主说的本来就很不明确,怎么叫UTF-8转GBK呢?是源文件本身编码方式的转变还是字符串的的转码?字符串的转码我就不啰嗦了源文件本身的转码可以在MyEclipse里面进行,MyEclipse有这个功能,强制把xx类型的页面用xx格式编码。
解决方案七:
我Webutf-8后台收到的也是Utf-8,我现在要掉对方一个接口,对方让我将编码转成Gbk.这样应该清楚了吧?页面编码是不能改的。那个方法是发给大家仓考的。期待大家知道的能告诉下,多谢
解决方案八:
Stringstr="中";//这里默认是UTF-8byte[]b=str.getBytes("GBK");System.out.println(newString(b,"GBK"));

解决方案九:
貌似楼上的方法可以。。。
解决方案十:
引用6楼clz1314521的回复:

我Webutf-8后台收到的也是Utf-8,我现在要掉对方一个接口,对方让我将编码转成Gbk.这样应该清楚了吧?页面编码是不能改的。那个方法是发给大家仓考的。期待大家知道的能告诉下,多谢

不清楚。你怎么调对方接口的,Web?直接传字节流?这是关键。
解决方案十一:
比方说OutputStream吧,你这样做//OutputStreamos;os.write("要传的中文字符串".getBytes("GBK"));
解决方案十二:
newString(tmp.getBytes("GBK"),"ISO-8859-1")这呢
解决方案十三:
我是通过Webservice调对方接口,我现在Action中得到的是正确utf8中文,但是我要将其转成gbk的中文去调对方接口。
解决方案十四:
newString(tmp.getBytes("UTF-8"),"GBK")如果正确的UTF-8那这个应该可以啊确定吗
解决方案十五:
楼上可以写个测试方法跑下,看看得到是不是?,一个正常的Utf8是三个字节转成Gbk,肯定要拆成二进制进行转换的。
其他方案:
引用12楼clz1314521的回复:

我是通过Webservice调对方接口,我现在Action中得到的是正确utf8中文,但是我要将其转成gbk的中文去调对方接口。

把调用的相关代码贴出来吧。
其他方案:
代码没有特殊的地方,我晚上回家发下。我已经抓过包了,接口那边收到的确定是正常的utf8中文,我现在就是想把他转成Gbk。这样问题,我应该不是第一个遇到的,请处理过的人赐教。我应该说的够清楚了吧?谢谢
其他方案:
找到一个VC和C的UTf-8转GBK的源码,http://hi.baidu.com/snacky/blog/item/c1e7de13857f05075baf5325.html至今还没找到Java的。期待达人出现,解决这个问题。贴个思路给大家。朋友让我帮他写个gb2312->utf-8的字符转换程序,找了半天没有在网上找到合适的,于是自己动手写了一个,呵呵。把它贴在这里,免得以后忘记了^_^实现思路大致如下:取得一个汉字的Unicode码把Unicode码分解为两个16进制数据字符串(丢弃前两个字节)把这两个16进制数据字符串转换成二进制数据字符串把二进制数据字符串分解为三个串,第一个串为4(0~4)个位,在高位加上标记位“1110”,第二(4~10)、三个(10~16)串均为6个位,分别在高位加上“10”标记位把这三个二进制串分别转换为10进制数据并赋值给字节型数组根据这个字节型数组构造UTF-8字符UTF-8转GBK应该是按这个思路反向转。
其他方案:
界贴了,虽然没有答案,,感谢大家关注

时间: 2024-11-13 09:45:19

有没有做过Java的UTF-8编码转GBK的方法,高分求的相关文章

Java drawOval(x,y,w,h)方法怎么求圆心

问题描述 Java drawOval(x,y,w,h)方法怎么求圆心 在线等 Java drawOval(x,y,w,h)方法怎么求圆心 x,,y不是圆心,想知道怎么知道半径和x,y怎么求圆心 解决方案 x+w/2,y+h/2 不过如果不是正圆,而是椭圆,这个只是长轴短轴的交点了. 解决方案二: http://bbs.csdn.net/topics/40379137http://www.doc88.com/p-9939430330964.html 这两个链接你可以点击进去看看,希望对你有帮助

求助,谁用过Scooter Framework做过Java项目开发。用的是什么IDE?求指导

问题描述 ScooterFramework,谁用过.我手上的项目以前是用记事本开发的,我现在想将项目导入eclipse中,导进去报错,scooter.jar的包加载不上.INFO:Ifjarsunderscooter/pluginsareneeded,use-Dscooter.home=...tosetuppathtotheplugindirectory.14/08/2811:37:49,254WARNAutoLoaderConfig-Pathforreferences[]isnotadirec

有人做过java httpclient 模拟登陆outlook 获取邮件的吗

问题描述 有人做过java httpclient 模拟登陆outlook 获取邮件的吗 有人做过java httpclient 模拟登陆outlook 获取邮件的吗 解决方案 其实现在很多可以做模拟登录的httpClient,JSOUP,htmlUnit,我做过用Jsoup做模拟登录,要做两次模拟,第一次是获得Cookie,第二次带入cookie就行了,大致思想就是这样. 解决方案二: 这种程序没有意义,因为网页是不断变化的,你应该用mapi从本地outlook获取,或者用pop协议从邮箱服务器

网络编程-想做一个java b站的第三方登录,请问有什么比较方便的jar包可以引用?

问题描述 想做一个java b站的第三方登录,请问有什么比较方便的jar包可以引用? 如题,还是说只能用httpurlconnection?然后我用wireshark试图抓account.bilibili.com/login的数据包,结果死活抓不到post的包...感觉如果没有post包的话没办法进行数据分析...就没办法继续写下去了...由于是第一次设计,所以可能思路会有点问题,如果有做过类似程序的前辈感谢给出一点点建议....谢谢! import java.net.URL; import j

java邮箱验证email-谁做过java邮箱验证,将验证信息发送到指定的邮箱上去

问题描述 谁做过java邮箱验证,将验证信息发送到指定的邮箱上去 求案例,求API接口文档,求指点···················

java static-假设有一个类,我只对这个类的引用做一个声明,那么这个类中的static方法会被初始化吗

问题描述 假设有一个类,我只对这个类的引用做一个声明,那么这个类中的static方法会被初始化吗 假设下面这种情况,test1中的do方法会被初始化吗? public class test{ public static void main(string []args){ test1 t: } } class test1{ int i: static void do(){} } 解决方案 第一次访问的含义是,访问了这个静态类中的任何方法.属性.字段,那么所有的属性都会被初始化. 解决方案二: 方法

java-求做一个Java类的设计的题

问题描述 求做一个Java类的设计的题 Account类:代表一个银行账户 balance属性:代表账户里的金额 deposit方法:向账户中存钱,如果传入的金额大于0,存钱,返回true,否则不存钱,返回false withdraw方法:从账户中取钱,如果余额够,取钱,返回true,如果余额不足,不取钱,返回false display方法:用于查询当前帐户金额 解决方案 public class Account { private double balance;//定义账户的金额 /** *

j2ee javaee java-最近在做一个java ee的学生考试管理系统,有个小问题

问题描述 最近在做一个java ee的学生考试管理系统,有个小问题 可以设定课程的考试成绩的计算方法:能够在页面上对某课程动态增加考核点,并填入该考核点的分值比例.如:如对J2EE课程,可新增3个考核点,考核点1为到课情况,分值比例为20%:考核点2为作业,分值比例为20%:考核点3为考试,分值比例为60%.能够验证分值比例之和是否等于100%. 这是要求 , 谁能给我提示一下如何实现 实在是想不出来 解决方案 一:E-R 关系 你们项目里面肯定会有学生信息表.课程信息表这二张表,现在要你动态对

我想做一个java程序,可以连接到云端怎么做?

问题描述 我想做一个java程序,可以连接到云端怎么做? 我想做一个java程序,可以连接到云端怎么做?我想做一个java程序,可以连接到云端怎么做?我想做一个java程序,可以连接到云端怎么做?我想做一个java程序,可以连接到云端怎么做?我想做一个java程序,可以连接到云端怎么做?我想做一个java程序,可以连接到云端怎么做?我想做一个java程序,可以连接到云端怎么做? 解决方案 很简单,首先准备少许水,再准备酒精灯,然后将水加热,当水变成水蒸气,OK你就成功了!很快水蒸气飞向天空,自然