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

丶请叫我小周 2014-09-23 04:29:20
String str = "MessageContent=中文转换";
String a = new String(str.getBytes("UTF-8"),"gb2312");
System.out.println(a);

这样转换出来的是乱码。。。
...全文
8731 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Cans_ 2017-04-11
  • 打赏
  • 举报
回复 1
大胸第,问题解决了给我们也分享下啊. 我现在遇到了相同的问题, 求告知啊...
Killua67 2016-09-26
  • 打赏
  • 举报
回复
引用 11 楼 u012521676 的回复:
问题解决了,但是新的问题有出来了,调用的接口方法的返回值,中文部分显示成乱码了,我去
楼主你是怎么解决的1
丶请叫我小周 2014-09-24
  • 打赏
  • 举报
回复
问题解决了,但是新的问题有出来了,调用的接口方法的返回值,中文部分显示成乱码了,我去
丶请叫我小周 2014-09-24
  • 打赏
  • 举报
回复
引用 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; }
  • 打赏
  • 举报
回复
两者不能直接转换。要过度一下。比如先转为unicode或者转为字节数组。
丶请叫我小周 2014-09-24
  • 打赏
  • 举报
回复
我声明的这个String变量的值是有一部分中文加上从数据库中获取到的数据拼接起来的,但是好像UTF-8格式的转gb2312格式不太好转啊
丶请叫我小周 2014-09-24
  • 打赏
  • 举报
回复
引用 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编码格式的才能识别,不然就认定为没有值
humanity 2014-09-24
  • 打赏
  • 举报
回复
当你“需要一个字符“时是没有字符集的概念的。字符集只在你想把它”转移到另一个系统中”时才有意义,比如把字符通过网络发送出去或保存到磁盘上,这种情况下都是要求 byte[] 类型的数据,才有了把 char 或 String 转换成 byte[] 的要求。而如果对方也是接收String 作为参数的话,你可以忘记字符集这回事。 因此你直接这么 new String(a.getBytes("UTF-8"), "GB2312") 是没有实际意义的。
nicholasbobo 2014-09-23
  • 打赏
  • 举报
回复
我猜你可能是想用一个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();
			}
sgzlove 2014-09-23
  • 打赏
  • 举报
回复
百度搜索到的一个解释,希望对你有用! 首先要看你系统本来默认是什么编码方式的了这很重要。 在.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编码格式。
sgzlove 2014-09-23
  • 打赏
  • 举报
回复
显示乱码是取决于你的编译环境的,并不是你转码失败 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(); }
bree06 2014-09-23
  • 打赏
  • 举报
回复
除非"MessageContent=中文转换";保存为utf-8格式,不然就是乱码。
丶请叫我小周 2014-09-23
  • 打赏
  • 举报
回复
引用 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);
nicholasbobo 2014-09-23
  • 打赏
  • 举报
回复
用com.apache.commons.io.IOUtils里的方法(下载地址:http://commons.apache.org/proper/commons-io/): String gbkString = IOUtils.toString(IOUtils.toInputStream(utf8String, "gb2312"));

23,405

社区成员

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

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