java中如何将字符串的编码从utf-8转换成gbk而且不会产生乱码

withfox 2011-10-13 05:03:46
现在我有这么一个问题,我这边用的是linux系统,所有的设置都是utf-8编码的,但是我现在要给别的系统传送报文,他的报文格式只能是gbk编码的,我如何将我我的报文转换成gbk编码的报文(而且汉字都是正常的),例如我本地的报文为“<PRODUCTNAME>中信聚信汇金</PRODUCTNAME>”那么如何转换成gbk编码的呢?同问:gbk编码的报文如何转换成utf-8编码的而且无乱码?

...全文
63995 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
arike001 2014-06-24
  • 打赏
  • 举报
回复
有解决方案了吗
withfox 2012-02-20
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 imlulin 的回复:]

大哥 最后好了没有呢? 我也遇到这个问题 奇怪的是 在一个地方可以 另一个地方不行
[/Quote]

最后改了一下linux的编码 修改方法:vi /root/.bash_profile
export LC_ALL="zh_CN.GBK"
export LANG="zh_CN.GBK"
export LANG=en_US

不知道怎么弄,linux默认编码是utf-8的,然后utf-8到GBK转码怎么都不行,但是可以GBK到utf-8转码
liujun3512159 2012-02-10
  • 打赏
  • 举报
回复
我有办法,我给你代码
imlulin 2012-01-11
  • 打赏
  • 举报
回复
大哥 最后好了没有呢? 我也遇到这个问题 奇怪的是 在一个地方可以 另一个地方不行
withfox 2011-10-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bao110908 的回复:]

读取时使用 UTF-8,写入时使用 GBK 编码就可以了。

JAVA 使用的是 UNICODE,内部可以根据不同的编码字符集进行转换。

PS:1 楼的做法是不可行的。
[/Quote]这个报文我是直接在程序内部写好的,没有写成xml文件啊,我想的是直接写成xml的字符串,直接就做签名,但是签名的报文必须是gbk编码的,否则那边收到报文是乱码
withfox 2011-10-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sasuke38 的回复:]

Java code

public static void main(String[] args) {
String str="字符串编码转换";
try {
byte[] temp=str.getBytes("utf-8");//这里写原编码方式
String newStr=new String(temp,"gb……
[/Quote]这个报文我是直接在程序内部写好的,没有写成xml文件啊,我想的是直接写成xml的字符串,直接就做签名,但是签名的报文必须是gbk编码的,否则那边收到报文是乱码
withfox 2011-10-14
  • 打赏
  • 举报
回复
这个报文我是直接在程序内部写好的,没有写成xml文件啊,我想的是直接写成xml的字符串,直接就做签名,但是签名的报文必须是gbk编码的,否则那边收到报文是乱码
jeffsc 2011-10-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zijie885 的回复:]

Java code
public static void main(String[] args) {
String str="字符串编码转换";
try {
byte[] temp=str.getBytes("utf-8");//这里写原编码方式
byte[] newtemp=new String(temp,"utf-……
[/Quote]可以吗?
dujie0902 2011-10-14
  • 打赏
  • 举报
回复
写一个代码过滤器,,什么语言都可以设置!
丶蒙圈丶 2011-10-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bao110908 的回复:]
读取时使用 UTF-8,写入时使用 GBK 编码就可以了。

JAVA 使用的是 UNICODE,内部可以根据不同的编码字符集进行转换。

PS:1 楼的做法是不可行的。
[/Quote]



+++
小菜鸟的博客 2011-10-14
  • 打赏
  • 举报
回复
多点告诉你
小菜鸟的博客 2011-10-14
  • 打赏
  • 举报
回复
20分 太少了
一天zijie一夜 2011-10-14
  • 打赏
  • 举报
回复
public static void main(String[] args) {
String str="字符串编码转换";
try {
byte[] temp=str.getBytes("utf-8");//这里写原编码方式
byte[] newtemp=new String(temp,"utf-8").getBytes("gbk");//这里写转换后的编码方式
String newStr=new String(newtemp,"gbk");//这里写转换后的编码方式
System.out.println(newStr);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}



withfox 2011-10-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bao110908 的回复:]

读取时使用 UTF-8,写入时使用 GBK 编码就可以了。

JAVA 使用的是 UNICODE,内部可以根据不同的编码字符集进行转换。

PS:1 楼的做法是不可行的。
[/Quote]老兄,这个我试了,但是还是破坏了报文,在linux下我做了一下测试
String message = "<?xml version=\"1.0\" encoding=\"GBK\"?><stream>PRODUCTNAME>转码·编码疯了啊</PRODUCTNAME>stream>";

String sendCodeMessage = new String(message.getBytes(),"UTF-8");
File file = new File("/usr/signTest/test.txt");
Writer writer = new OutputStreamWriter(new FileOutputStream(file));
writer.write(message);
writer.flush();
writer.close();
File file1 = new File("/usr/signTest/utf.txt");
Writer writer1 = new OutputStreamWriter(new FileOutputStream(file1), "UTF-8");
writer1.write(sendCodeMessage);
writer1.flush();
writer1.close();
String sendCodeMessage1 = new String(message.getBytes(),"GBK");
File file2 = new File("/usr/signTest/gbk.txt");
Writer writer2 = new OutputStreamWriter(new FileOutputStream(file2), "GBK");
writer2.write(sendCodeMessage1);
writer2.flush();
writer2.close();

生成的三个文件内容分别为:test.txt文件:<?xml version="1.0" encoding="GBK"?><stream><PRODUCTNAME>转码·编码疯了啊</PRODUCTNAME></stream>
utf.txt文件:<?xml version="1.0" encoding="GBK"?><stream><PRODUCTNAME>转码·编码疯了啊</PRODUCTNAME></stream>
gbk.txt文件:<?xml version="1.0" encoding="GBK"?><stream><PRODUCTNAME>杞爜路缂栫爜鐤簡鍟?/PRODUCTNAME><PRODUCTCODE></stream>
在gbk.txt文件中xml的格式被破坏了,也就是说即使在程序中直接做编码的转换也会破坏报文,那该如何解决呢?
withfox 2011-10-14
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 houpengfei111 的回复:]

多点告诉你
[/Quote]我在http://topic.csdn.net/u/20111014/15/d4bbf15f-25c7-4775-be01-e9c4b91ee8cd.html这个帖子里有更详细的问题,分数也增加了,如果你能帮我解决问题,分数好说
withfox 2011-10-14
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 sasuke38 的回复:]

Java code

String a="这里是你在程序内部写好的什么报文了";
String b=new String(a.getBytes(),"utf-8");//这里重新生成一次String
os.write(b.getBytes("gbk"));//os(这是OutputStream)写入文件


楼主你试试这个 不行的话自己多试试别的
[/Quote]这个方法不行,我在http://topic.csdn.net/u/20111014/15/d4bbf15f-25c7-4775-be01-e9c4b91ee8cd.html这个帖子里有更详细的问题
Jobernowl 2011-10-14
  • 打赏
  • 举报
回复

String a="这里是你在程序内部写好的什么报文了";
String b=new String(a.getBytes(),"utf-8");//这里重新生成一次String
os.write(b.getBytes("gbk"));//os(这是OutputStream)写入文件

楼主你试试这个 不行的话自己多试试别的
java1109 2011-10-13
  • 打赏
  • 举报
回复


SAXReader reader = new SAXReader();
Document document = reader.read(new Reader(), "GBK");
  • 打赏
  • 举报
回复
读取时使用 UTF-8,写入时使用 GBK 编码就可以了。

JAVA 使用的是 UNICODE,内部可以根据不同的编码字符集进行转换。

PS:1 楼的做法是不可行的。
Jobernowl 2011-10-13
  • 打赏
  • 举报
回复

public static void main(String[] args) {
String str="字符串编码转换";
try {
byte[] temp=str.getBytes("utf-8");//这里写原编码方式
String newStr=new String(temp,"gbk");//这里写转换后的编码方式
System.out.println(newStr);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


你试一下这个

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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