java 中文utf-8 转成中文GBK

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

   new String(str.getByte("UTF-8"), "gbk") 这样的肯定行不通,

16 个解决方案

#1


如果需要GBK编码,那么你编码成GBK然后传过去不就行了?
比如String a = "我爱中国"
用GBK编码a.getBytes("GBK")不就得到对应的字节数据了

你如果把编码过的数据再用GBK解码那当然是同样的字符,如果不是那岂不乱套了?
比如new String(a.getBytes("GBK"), "GBK")当然还是"我爱中国"

#2


java 中文utf-8 转成中文GBK
我也觉的楼上说的有理

#3


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();
}
}

#4


对方不会做gbk编码转换的,
简单点说  要把UTF-8 的 "我爱中国" 转成 gbk的 "我爱中国"

#5


byte[] bytes = "我爱中国".getBytes("GBK");
把这个字节流发给他就行了

#6


引用 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();

#7


new String(str.getByte("UTF-8"), "gbk")

这句话的含义是 

1、将字符串str编码为UTF-8字节数组 // str.getByte("UTF-8")
2、把这个字节数组当做GBK编码的数据,转换回字符 // new String(xxx, "gbk")

结果是必定乱码

#8


支持6楼 java 中文utf-8 转成中文GBK,楼主遇到问题要多尝试

#9


String ns=new String(s.getByte("unicode"),"GBK"); java 中文utf-8 转成中文GBK

#10


如楼上几位所述
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"));

#11


好帖子! java 中文utf-8 转成中文GBK

#12


五楼正解 java 中文utf-8 转成中文GBK

#13


byte[] bytes = "我爱中国".getBytes("GBK");

#14


引用 5 楼 tigeryu 的回复:
byte[] bytes = "我爱中国".getBytes("GBK");
把这个字节流发给他就行了

这个主意可行

#15


字符编码,指的是二进制的数据,不是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楼的意思差不多。

#16


哦。楼主是UTF-8转GBK 。 我的代码是GBK转UTF-8 , 写反了,不好意思。楼主要调换一下编码方式。

#1


如果需要GBK编码,那么你编码成GBK然后传过去不就行了?
比如String a = "我爱中国"
用GBK编码a.getBytes("GBK")不就得到对应的字节数据了

你如果把编码过的数据再用GBK解码那当然是同样的字符,如果不是那岂不乱套了?
比如new String(a.getBytes("GBK"), "GBK")当然还是"我爱中国"

#2


java 中文utf-8 转成中文GBK
我也觉的楼上说的有理

#3


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();
}
}

#4


对方不会做gbk编码转换的,
简单点说  要把UTF-8 的 "我爱中国" 转成 gbk的 "我爱中国"

#5


byte[] bytes = "我爱中国".getBytes("GBK");
把这个字节流发给他就行了

#6


引用 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();

#7


new String(str.getByte("UTF-8"), "gbk")

这句话的含义是 

1、将字符串str编码为UTF-8字节数组 // str.getByte("UTF-8")
2、把这个字节数组当做GBK编码的数据,转换回字符 // new String(xxx, "gbk")

结果是必定乱码

#8


支持6楼 java 中文utf-8 转成中文GBK,楼主遇到问题要多尝试

#9


String ns=new String(s.getByte("unicode"),"GBK"); java 中文utf-8 转成中文GBK

#10


如楼上几位所述
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"));

#11


好帖子! java 中文utf-8 转成中文GBK

#12


五楼正解 java 中文utf-8 转成中文GBK

#13


byte[] bytes = "我爱中国".getBytes("GBK");

#14


引用 5 楼 tigeryu 的回复:
byte[] bytes = "我爱中国".getBytes("GBK");
把这个字节流发给他就行了

这个主意可行

#15


字符编码,指的是二进制的数据,不是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楼的意思差不多。

#16


哦。楼主是UTF-8转GBK 。 我的代码是GBK转UTF-8 , 写反了,不好意思。楼主要调换一下编码方式。