java 中文utf-8 转成中文GBK

ww_cswh 2014-06-06 10:01:42
有个问题请教一下,我这边的项目是utf-8编码的,由于客户需要 给客户送报文,对方要求的格式是gbk编码的,请问我这边的中文要怎么转换。
如: String a = "我爱中国" ,怎么转换成gbk也是 “我爱中国”

new String(str.getByte("UTF-8"), "gbk") 这样的肯定行不通,
...全文
24808 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
冰思雨 2014-06-10
  • 打赏
  • 举报
回复
哦。楼主是UTF-8转GBK 。 我的代码是GBK转UTF-8 , 写反了,不好意思。楼主要调换一下编码方式。
冰思雨 2014-06-10
  • 打赏
  • 举报
回复
字符编码,指的是二进制的数据,不是Java对象。 楼主的那个String变量,不是二进制数据,而是Java对象。 所有的String对象,在Java语言里,都是Unicode编码的。 GBK和UTF-8编码的数据,要看二进制数据,也就是byte数组。 像5楼那样的写法,才算比较靠谱。 编程方面来讲,可以有两种方式: 第一种,面向二进制编程
byte[] before = ...;//GBK数据
String data = new String(before,"GBK");
byte[] result = data.getBytes("UTF-8");
第二种,面向字符编程,这个方式是处理大数据时用的,我就不写了。和6楼的意思差不多。
Magical茏 2014-06-09
  • 打赏
  • 举报
回复
String ns=new String(s.getByte("unicode"),"GBK");
fengerpiao123 2014-06-09
  • 打赏
  • 举报
回复
引用 5 楼 tigeryu 的回复:
byte[] bytes = "我爱中国".getBytes("GBK"); 把这个字节流发给他就行了
这个主意可行
NickCheng 2014-06-09
  • 打赏
  • 举报
回复
好帖子!
Java精选 2014-06-09
  • 打赏
  • 举报
回复
byte[] bytes = "我爱中国".getBytes("GBK");
dgqjava 2014-06-09
  • 打赏
  • 举报
回复
五楼正解
shine333 2014-06-09
  • 打赏
  • 举报
回复
如楼上几位所述 Java String是不存在UTF-8, GBK的 Java的String就是一串文字(当然,底层是Unicode) 只有当String <-----> byte[] 的时候,才会存在编码问题 人家说你编码不对,估计你是用了Reader/Writer,你现在应该改用InputStream/OutputStream 区别于Reader/Writer(字符流)读/写的是字符(char, String),Stream对应的是byte,你现在写的时候,把String变成对方要的byte发过去,方法即是outputStream.write(str.getBytes("GBK"));
hm92814 2014-06-08
  • 打赏
  • 举报
回复
支持6楼,楼主遇到问题要多尝试
结贴是美德 2014-06-08
  • 打赏
  • 举报
回复
new String(str.getByte("UTF-8"), "gbk") 这句话的含义是 1、将字符串str编码为UTF-8字节数组 // str.getByte("UTF-8") 2、把这个字节数组当做GBK编码的数据,转换回字符 // new String(xxx, "gbk") 结果是必定乱码
vnvlyp 2014-06-08
  • 打赏
  • 举报
回复
引用 4 楼 ww_cswh 的回复:
对方不会做gbk编码转换的, 简单点说 要把UTF-8 的 "我爱中国" 转成 gbk的 "我爱中国"
在Java里,字符都是Unicode编码的,所以"我爱中国"在Java里永远只有一种字符表示,至于UTF-8还是GBK,这些是编码方式,是一种对字符的编码方法,你只有编码后,才有UTF-8和GBK的区别,你用字符或者字符串表示的话,不存在他是UTF-8还是GBK编码的,因为你根本都没有编码,何来编码方式? 我猜你大概是想用文本的方式把文字发送出去,然后你发现直接发送是乱码,所以就想当然地以为把这个文字“转换”为GBK编码就行了,但文字本身是不存在编码的,之所以你发送的是乱码,是因为你用了错误的编码方式发送,我猜你的代码大概是这样,首先取得一个OutputStream,然后架设一个Writer,可能是PrintWriter,可能是BufferedWriter,然后发送字符串,像下面这样。
		OutputStream out;
		PrintWriter writer = new PrintWriter(out);
		writer.write("我爱中国");
		writer.close();
但问题是PrintWriter和BufferedWriter这样写都是直接使用系统默认编码方式,你的可能是UTF-8,所以就导致你用了错误的编码方式发送字符串。 解决方法是,在创建Writer时指定字符集,而PrintWriter和BufferedWriter貌似不支持,所以你要用OutputStreamWriter。
		OutputStream out;
		OutputStreamWriter writer = new OutputStreamWriter(out, "GBK");
		writer.write("我爱中国");
		writer.close();
csco1183 2014-06-07
  • 打赏
  • 举报
回复
package tansfer; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; public class Transfer { public static void main(String[] args) { try { writeUTF8("testTransferUTF8.txt","UTF-8"); File file = new File("testTransferGBK.txt"); file.createNewFile(); transfer(); } catch (Exception e) { e.printStackTrace(); } } public static void transfer() throws Exception{ BufferedReader in = new BufferedReader( new InputStreamReader( new BufferedInputStream( new FileInputStream("testTransferUTF8.txt")), "UTF-8")); String line; while((line = in.readLine())!=null){ System.out.println(line.toString()); writeGBK("testTransferGBK.txt","GBK",line); } in.close(); } public static void writeGBK(String fileName,String cha,String content) throws Exception{ PrintWriter out = new PrintWriter( new OutputStreamWriter( new BufferedOutputStream( new FileOutputStream(fileName,true)), cha)); out.println(content); out.close(); } public static void writeUTF8(String fileName,String cha) throws Exception{ PrintWriter out = new PrintWriter( new OutputStreamWriter( new BufferedOutputStream( new FileOutputStream(fileName)), cha)); out.println("测试第一行"); out.println("测试第二行asdfg"); out.println("测试第三行sasds"); out.println("测试第四行斯蒂芬森"); out.println("测试第五行斯蒂芬森sdf"); out.close(); } }
wuyue-tiger 2014-06-07
  • 打赏
  • 举报
回复
byte[] bytes = "我爱中国".getBytes("GBK"); 把这个字节流发给他就行了
ww_cswh 2014-06-07
  • 打赏
  • 举报
回复
对方不会做gbk编码转换的, 简单点说 要把UTF-8 的 "我爱中国" 转成 gbk的 "我爱中国"
Magical茏 2014-06-06
  • 打赏
  • 举报
回复
我也觉的楼上说的有理
vnvlyp 2014-06-06
  • 打赏
  • 举报
回复
如果需要GBK编码,那么你编码成GBK然后传过去不就行了? 比如String a = "我爱中国" 用GBK编码a.getBytes("GBK")不就得到对应的字节数据了 你如果把编码过的数据再用GBK解码那当然是同样的字符,如果不是那岂不乱套了? 比如new String(a.getBytes("GBK"), "GBK")当然还是"我爱中国"

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧