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"));
String gbkString = IOUtils.toString(IOUtils.toInputStream(utf8String, "gb2312"));
#2
这要好像行不通啊,这是我转换出来的:����Ҫת�����ַ�
这是我的代码:
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();
}
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编码格式。
首先要看你系统本来默认是什么编码方式的了这很重要。
在.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
我的Java文件文本编辑器使用的字符编码是UTF-8的,现在我是想要我的这个声明的String变量的值变成gb2312编码的格式,再把值传给一个接口方法,这个接口方法要求参数值是gb2312编码格式的才能识别,不然就认定为没有值
#8
我声明的这个String变量的值是有一部分中文加上从数据库中获取到的数据拼接起来的,但是好像UTF-8格式的转gb2312格式不太好转啊
#9
两者不能直接转换。要过度一下。比如先转为unicode或者转为字节数组。
#10
那要怎么做啊,我之前在网上看到了一些先转成字节数组,再转为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") 是没有实际意义的。
因此你直接这么 new String(a.getBytes("UTF-8"), "GB2312") 是没有实际意义的。
#13
楼主你是怎么解决的1
#14
大胸第,问题解决了给我们也分享下啊. 我现在遇到了相同的问题, 求告知啊...
#1
用com.apache.commons.io.IOUtils里的方法(下载地址:http://commons.apache.org/proper/commons-io/):
String gbkString = IOUtils.toString(IOUtils.toInputStream(utf8String, "gb2312"));
String gbkString = IOUtils.toString(IOUtils.toInputStream(utf8String, "gb2312"));
#2
这要好像行不通啊,这是我转换出来的:����Ҫת�����ַ�
这是我的代码:
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();
}
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编码格式。
首先要看你系统本来默认是什么编码方式的了这很重要。
在.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
我的Java文件文本编辑器使用的字符编码是UTF-8的,现在我是想要我的这个声明的String变量的值变成gb2312编码的格式,再把值传给一个接口方法,这个接口方法要求参数值是gb2312编码格式的才能识别,不然就认定为没有值
#8
我声明的这个String变量的值是有一部分中文加上从数据库中获取到的数据拼接起来的,但是好像UTF-8格式的转gb2312格式不太好转啊
#9
两者不能直接转换。要过度一下。比如先转为unicode或者转为字节数组。
#10
那要怎么做啊,我之前在网上看到了一些先转成字节数组,再转为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") 是没有实际意义的。
因此你直接这么 new String(a.getBytes("UTF-8"), "GB2312") 是没有实际意义的。
#13
楼主你是怎么解决的1
#14
大胸第,问题解决了给我们也分享下啊. 我现在遇到了相同的问题, 求告知啊...