java怎么把utf-8的字符串转换为gb2312格式

时间:2023-01-05 22:07:59
String str = "MessageContent=中文转换";
String a = new String(str.getBytes("UTF-8"),"gb2312");
System.out.println(a);

这样转换出来的是乱码。。。

14 个解决方案

#1


用com.apache.commons.io.IOUtils里的方法(下载地址:http://commons.apache.org/proper/commons-io/):
String gbkString = IOUtils.toString(IOUtils.toInputStream(utf8String, "gb2312"));

#2


引用 1 楼 nicholasbobo 的回复:
用com.apache.commons.io.IOUtils里的方法(下载地址:http://commons.apache.org/proper/commons-io/):
String gbkString = IOUtils.toString(IOUtils.toInputStream(utf8String, "gb2312"));

这要好像行不通啊,这是我转换出来的:����Ҫת�����ַ�

这是我的代码:
String str = "这是要转换的字符";
String gbkString = IOUtils.toString(IOUtils.toInputStream(str, "gb2312"));
System.out.println(gbkString);

#3


除非"MessageContent=中文转换";保存为utf-8格式,不然就是乱码。

#4


显示乱码是取决于你的编译环境的,并不是你转码失败

String str = "MessageContent=涓枃杞崲";

try {
String a = new String(str.getBytes("gbk"),"utf-8");
System.out.println(a);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

#5


百度搜索到的一个解释,希望对你有用!

首先要看你系统本来默认是什么编码方式的了这很重要。
在.java中声明的String变量的字符编码,是与当前文本编辑器使用的字符编码一致

例如,在MyEclipse中,我设置的默认编码为GBK
系统数据依照gbk的编码方式。使用str.getBytes("gbk")把数据还原(这点很重要),
然后利用new String(str.getBytes("gbk"), "utf-8")把数据从gb2312转换成utf-8
所以要清楚知道str.getBytes("gbk")这里的str字符本来是不是gbk编码的很重要,如果它是iso8859-1呢,那就会出错了。也许你不小心弄混了。就会时对时错了。
注意:
在.java中声明的String变量的字符编码,是与当前文本编辑器使用的字符编码一致
例如,在MyEclipse中,我设置的默认编码为GBK
则字符就是gbk编码格式。

#6


我猜你可能是想用一个gb2312的JAVA程序读取一个字符编码为UTF-8的属性文件,你只要正确设置流的字符编码为UTF-8,就可以在gb2312里正确显示这个文件里的字符了,代码如下:
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("D:/testencode.txt"),"UTF-8"));
String str = reader.readLine();
while(str !=null){
System.out.println(str);
str = reader.readLine();
}

#7


引用 5 楼 sgzlove 的回复:
百度搜索到的一个解释,希望对你有用!

首先要看你系统本来默认是什么编码方式的了这很重要。
在.java中声明的String变量的字符编码,是与当前文本编辑器使用的字符编码一致

例如,在MyEclipse中,我设置的默认编码为GBK
系统数据依照gbk的编码方式。使用str.getBytes("gbk")把数据还原(这点很重要),
然后利用new String(str.getBytes("gbk"), "utf-8")把数据从gb2312转换成utf-8
所以要清楚知道str.getBytes("gbk")这里的str字符本来是不是gbk编码的很重要,如果它是iso8859-1呢,那就会出错了。也许你不小心弄混了。就会时对时错了。
注意:
在.java中声明的String变量的字符编码,是与当前文本编辑器使用的字符编码一致
例如,在MyEclipse中,我设置的默认编码为GBK
则字符就是gbk编码格式。

我的Java文件文本编辑器使用的字符编码是UTF-8的,现在我是想要我的这个声明的String变量的值变成gb2312编码的格式,再把值传给一个接口方法,这个接口方法要求参数值是gb2312编码格式的才能识别,不然就认定为没有值

#8


我声明的这个String变量的值是有一部分中文加上从数据库中获取到的数据拼接起来的,但是好像UTF-8格式的转gb2312格式不太好转啊

#9


两者不能直接转换。要过度一下。比如先转为unicode或者转为字节数组。

#10


引用 9 楼 fangmingshijie 的回复:
两者不能直接转换。要过度一下。比如先转为unicode或者转为字节数组。

那要怎么做啊,我之前在网上看到了一些先转成字节数组,再转为gb2312的,但是还是不行,这我就无奈了;
下面我的代码:
public static void main(String[] args) throws IOException {
TestBufferedReader t = new TestBufferedReader();
String str = "MessageContent=这是要转换的字符";
String a = t.utf8Togb2312(str);
System.out.println(a);

}

private String utf8Togb2312(String str){
StringBuffer sb = new StringBuffer();
for(int i=0; i<str.length(); i++) {
char c = str.charAt(i);
switch (c) {
case '+':
sb.append(' ');
break;
case '%':
try {
sb.append((char)Integer.parseInt(str.substring(i+1,i+3),16));
} catch (NumberFormatException e) {
throw new IllegalArgumentException();
}
i += 2;
break;
default:
sb.append(c);
break;
}
}
String result = sb.toString();
String res=null;
try {
byte[] inputBytes = result.getBytes("8859_1");
res= new String(inputBytes,"UTF-8");
}
catch(Exception e){}
return res;

#11


问题解决了,但是新的问题有出来了,调用的接口方法的返回值,中文部分显示成乱码了,我去

#12


当你“需要一个字符“时是没有字符集的概念的。字符集只在你想把它”转移到另一个系统中”时才有意义,比如把字符通过网络发送出去或保存到磁盘上,这种情况下都是要求  byte[] 类型的数据,才有了把 char 或 String 转换成 byte[] 的要求。而如果对方也是接收String 作为参数的话,你可以忘记字符集这回事。

因此你直接这么  new String(a.getBytes("UTF-8"), "GB2312") 是没有实际意义的。

#13


引用 11 楼 u012521676 的回复:
问题解决了,但是新的问题有出来了,调用的接口方法的返回值,中文部分显示成乱码了,我去


楼主你是怎么解决的1

#14


大胸第,问题解决了给我们也分享下啊.   我现在遇到了相同的问题, 求告知啊...

#1


用com.apache.commons.io.IOUtils里的方法(下载地址:http://commons.apache.org/proper/commons-io/):
String gbkString = IOUtils.toString(IOUtils.toInputStream(utf8String, "gb2312"));

#2


引用 1 楼 nicholasbobo 的回复:
用com.apache.commons.io.IOUtils里的方法(下载地址:http://commons.apache.org/proper/commons-io/):
String gbkString = IOUtils.toString(IOUtils.toInputStream(utf8String, "gb2312"));

这要好像行不通啊,这是我转换出来的:����Ҫת�����ַ�

这是我的代码:
String str = "这是要转换的字符";
String gbkString = IOUtils.toString(IOUtils.toInputStream(str, "gb2312"));
System.out.println(gbkString);

#3


除非"MessageContent=中文转换";保存为utf-8格式,不然就是乱码。

#4


显示乱码是取决于你的编译环境的,并不是你转码失败

String str = "MessageContent=涓枃杞崲";

try {
String a = new String(str.getBytes("gbk"),"utf-8");
System.out.println(a);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

#5


百度搜索到的一个解释,希望对你有用!

首先要看你系统本来默认是什么编码方式的了这很重要。
在.java中声明的String变量的字符编码,是与当前文本编辑器使用的字符编码一致

例如,在MyEclipse中,我设置的默认编码为GBK
系统数据依照gbk的编码方式。使用str.getBytes("gbk")把数据还原(这点很重要),
然后利用new String(str.getBytes("gbk"), "utf-8")把数据从gb2312转换成utf-8
所以要清楚知道str.getBytes("gbk")这里的str字符本来是不是gbk编码的很重要,如果它是iso8859-1呢,那就会出错了。也许你不小心弄混了。就会时对时错了。
注意:
在.java中声明的String变量的字符编码,是与当前文本编辑器使用的字符编码一致
例如,在MyEclipse中,我设置的默认编码为GBK
则字符就是gbk编码格式。

#6


我猜你可能是想用一个gb2312的JAVA程序读取一个字符编码为UTF-8的属性文件,你只要正确设置流的字符编码为UTF-8,就可以在gb2312里正确显示这个文件里的字符了,代码如下:
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("D:/testencode.txt"),"UTF-8"));
String str = reader.readLine();
while(str !=null){
System.out.println(str);
str = reader.readLine();
}

#7


引用 5 楼 sgzlove 的回复:
百度搜索到的一个解释,希望对你有用!

首先要看你系统本来默认是什么编码方式的了这很重要。
在.java中声明的String变量的字符编码,是与当前文本编辑器使用的字符编码一致

例如,在MyEclipse中,我设置的默认编码为GBK
系统数据依照gbk的编码方式。使用str.getBytes("gbk")把数据还原(这点很重要),
然后利用new String(str.getBytes("gbk"), "utf-8")把数据从gb2312转换成utf-8
所以要清楚知道str.getBytes("gbk")这里的str字符本来是不是gbk编码的很重要,如果它是iso8859-1呢,那就会出错了。也许你不小心弄混了。就会时对时错了。
注意:
在.java中声明的String变量的字符编码,是与当前文本编辑器使用的字符编码一致
例如,在MyEclipse中,我设置的默认编码为GBK
则字符就是gbk编码格式。

我的Java文件文本编辑器使用的字符编码是UTF-8的,现在我是想要我的这个声明的String变量的值变成gb2312编码的格式,再把值传给一个接口方法,这个接口方法要求参数值是gb2312编码格式的才能识别,不然就认定为没有值

#8


我声明的这个String变量的值是有一部分中文加上从数据库中获取到的数据拼接起来的,但是好像UTF-8格式的转gb2312格式不太好转啊

#9


两者不能直接转换。要过度一下。比如先转为unicode或者转为字节数组。

#10


引用 9 楼 fangmingshijie 的回复:
两者不能直接转换。要过度一下。比如先转为unicode或者转为字节数组。

那要怎么做啊,我之前在网上看到了一些先转成字节数组,再转为gb2312的,但是还是不行,这我就无奈了;
下面我的代码:
public static void main(String[] args) throws IOException {
TestBufferedReader t = new TestBufferedReader();
String str = "MessageContent=这是要转换的字符";
String a = t.utf8Togb2312(str);
System.out.println(a);

}

private String utf8Togb2312(String str){
StringBuffer sb = new StringBuffer();
for(int i=0; i<str.length(); i++) {
char c = str.charAt(i);
switch (c) {
case '+':
sb.append(' ');
break;
case '%':
try {
sb.append((char)Integer.parseInt(str.substring(i+1,i+3),16));
} catch (NumberFormatException e) {
throw new IllegalArgumentException();
}
i += 2;
break;
default:
sb.append(c);
break;
}
}
String result = sb.toString();
String res=null;
try {
byte[] inputBytes = result.getBytes("8859_1");
res= new String(inputBytes,"UTF-8");
}
catch(Exception e){}
return res;

#11


问题解决了,但是新的问题有出来了,调用的接口方法的返回值,中文部分显示成乱码了,我去

#12


当你“需要一个字符“时是没有字符集的概念的。字符集只在你想把它”转移到另一个系统中”时才有意义,比如把字符通过网络发送出去或保存到磁盘上,这种情况下都是要求  byte[] 类型的数据,才有了把 char 或 String 转换成 byte[] 的要求。而如果对方也是接收String 作为参数的话,你可以忘记字符集这回事。

因此你直接这么  new String(a.getBytes("UTF-8"), "GB2312") 是没有实际意义的。

#13


引用 11 楼 u012521676 的回复:
问题解决了,但是新的问题有出来了,调用的接口方法的返回值,中文部分显示成乱码了,我去


楼主你是怎么解决的1

#14


大胸第,问题解决了给我们也分享下啊.   我现在遇到了相同的问题, 求告知啊...