如: 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")当然还是"我爱中国"
比如String a = "我爱中国"
用GBK编码a.getBytes("GBK")不就得到对应的字节数据了
你如果把编码过的数据再用GBK解码那当然是同样的字符,如果不是那岂不乱套了?
比如new String(a.getBytes("GBK"), "GBK")当然还是"我爱中国"
#2
我也觉的楼上说的有理
#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();
}
}
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的 "我爱中国"
简单点说 要把UTF-8 的 "我爱中国" 转成 gbk的 "我爱中国"
#5
byte[] bytes = "我爱中国".getBytes("GBK");
把这个字节流发给他就行了
把这个字节流发给他就行了
#6
在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")
结果是必定乱码
这句话的含义是
1、将字符串str编码为UTF-8字节数组 // str.getByte("UTF-8")
2、把这个字节数组当做GBK编码的数据,转换回字符 // new String(xxx, "gbk")
结果是必定乱码
#8
支持6楼
,楼主遇到问题要多尝试
#9
String ns=new String(s.getByte("unicode"),"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"));
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
好帖子!
#12
五楼正解
#13
byte[] bytes = "我爱中国".getBytes("GBK");
#14
这个主意可行
#15
字符编码,指的是二进制的数据,不是Java对象。
楼主的那个String变量,不是二进制数据,而是Java对象。
所有的String对象,在Java语言里,都是Unicode编码的。
GBK和UTF-8编码的数据,要看二进制数据,也就是byte数组。
像5楼那样的写法,才算比较靠谱。
编程方面来讲,可以有两种方式:
第一种,面向二进制编程
第二种,面向字符编程,这个方式是处理大数据时用的,我就不写了。和6楼的意思差不多。
楼主的那个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")当然还是"我爱中国"
比如String a = "我爱中国"
用GBK编码a.getBytes("GBK")不就得到对应的字节数据了
你如果把编码过的数据再用GBK解码那当然是同样的字符,如果不是那岂不乱套了?
比如new String(a.getBytes("GBK"), "GBK")当然还是"我爱中国"
#2
我也觉的楼上说的有理
#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();
}
}
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的 "我爱中国"
简单点说 要把UTF-8 的 "我爱中国" 转成 gbk的 "我爱中国"
#5
byte[] bytes = "我爱中国".getBytes("GBK");
把这个字节流发给他就行了
把这个字节流发给他就行了
#6
在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")
结果是必定乱码
这句话的含义是
1、将字符串str编码为UTF-8字节数组 // str.getByte("UTF-8")
2、把这个字节数组当做GBK编码的数据,转换回字符 // new String(xxx, "gbk")
结果是必定乱码
#8
支持6楼
,楼主遇到问题要多尝试
#9
String ns=new String(s.getByte("unicode"),"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"));
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
好帖子!
#12
五楼正解
#13
byte[] bytes = "我爱中国".getBytes("GBK");
#14
这个主意可行
#15
字符编码,指的是二进制的数据,不是Java对象。
楼主的那个String变量,不是二进制数据,而是Java对象。
所有的String对象,在Java语言里,都是Unicode编码的。
GBK和UTF-8编码的数据,要看二进制数据,也就是byte数组。
像5楼那样的写法,才算比较靠谱。
编程方面来讲,可以有两种方式:
第一种,面向二进制编程
第二种,面向字符编程,这个方式是处理大数据时用的,我就不写了。和6楼的意思差不多。
楼主的那个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 , 写反了,不好意思。楼主要调换一下编码方式。