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

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

20 个解决方案

#1



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();
}
}


你试一下这个

#2


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

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

PS:1 楼的做法是不可行的。

#3




            SAXReader reader = new SAXReader();
            Document document = reader.read(new Reader(), "GBK");

#4


这个报文我是直接在程序内部写好的,没有写成xml文件啊,我想的是直接写成xml的字符串,直接就做签名,但是签名的报文必须是gbk编码的,否则那边收到报文是乱码

#5


引用 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……
这个报文我是直接在程序内部写好的,没有写成xml文件啊,我想的是直接写成xml的字符串,直接就做签名,但是签名的报文必须是gbk编码的,否则那边收到报文是乱码

#6


引用 2 楼 bao110908 的回复:
读取时使用 UTF-8,写入时使用 GBK 编码就可以了。

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

PS:1 楼的做法是不可行的。
这个报文我是直接在程序内部写好的,没有写成xml文件啊,我想的是直接写成xml的字符串,直接就做签名,但是签名的报文必须是gbk编码的,否则那边收到报文是乱码

#7


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();
        }
    }



#8


20分 太少了

#9


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

#10


引用 2 楼 bao110908 的回复:
读取时使用 UTF-8,写入时使用 GBK 编码就可以了。

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

PS:1 楼的做法是不可行的。




+++

#11


引用 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-……
可以吗?

#12



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

楼主你试试这个  不行的话自己多试试别的

#13


引用 12 楼 sasuke38 的回复:
Java code

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


楼主你试试这个  不行的话自己多试试别的
这个方法不行,我在http://topic.csdn.net/u/20111014/15/d4bbf15f-25c7-4775-be01-e9c4b91ee8cd.html这个帖子里有更详细的问题

#14


引用 9 楼 houpengfei111 的回复:
多点告诉你
我在http://topic.csdn.net/u/20111014/15/d4bbf15f-25c7-4775-be01-e9c4b91ee8cd.html这个帖子里有更详细的问题,分数也增加了,如果你能帮我解决问题,分数好说

#15


引用 2 楼 bao110908 的回复:
读取时使用 UTF-8,写入时使用 GBK 编码就可以了。

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

PS:1 楼的做法是不可行的。
老兄,这个我试了,但是还是破坏了报文,在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的格式被破坏了,也就是说即使在程序中直接做编码的转换也会破坏报文,那该如何解决呢?

#16


写一个代码过滤器,,什么语言都可以设置!

#17


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

#18


我有办法,我给你代码

#19


引用 17 楼 imlulin 的回复:
大哥 最后好了没有呢? 我也遇到这个问题 奇怪的是 在一个地方可以 另一个地方不行


最后改了一下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转码

#20


有解决方案了吗

#1



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();
}
}


你试一下这个

#2


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

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

PS:1 楼的做法是不可行的。

#3




            SAXReader reader = new SAXReader();
            Document document = reader.read(new Reader(), "GBK");

#4


这个报文我是直接在程序内部写好的,没有写成xml文件啊,我想的是直接写成xml的字符串,直接就做签名,但是签名的报文必须是gbk编码的,否则那边收到报文是乱码

#5


引用 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……
这个报文我是直接在程序内部写好的,没有写成xml文件啊,我想的是直接写成xml的字符串,直接就做签名,但是签名的报文必须是gbk编码的,否则那边收到报文是乱码

#6


引用 2 楼 bao110908 的回复:
读取时使用 UTF-8,写入时使用 GBK 编码就可以了。

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

PS:1 楼的做法是不可行的。
这个报文我是直接在程序内部写好的,没有写成xml文件啊,我想的是直接写成xml的字符串,直接就做签名,但是签名的报文必须是gbk编码的,否则那边收到报文是乱码

#7


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();
        }
    }



#8


20分 太少了

#9


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

#10


引用 2 楼 bao110908 的回复:
读取时使用 UTF-8,写入时使用 GBK 编码就可以了。

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

PS:1 楼的做法是不可行的。




+++

#11


引用 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-……
可以吗?

#12



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

楼主你试试这个  不行的话自己多试试别的

#13


引用 12 楼 sasuke38 的回复:
Java code

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


楼主你试试这个  不行的话自己多试试别的
这个方法不行,我在http://topic.csdn.net/u/20111014/15/d4bbf15f-25c7-4775-be01-e9c4b91ee8cd.html这个帖子里有更详细的问题

#14


引用 9 楼 houpengfei111 的回复:
多点告诉你
我在http://topic.csdn.net/u/20111014/15/d4bbf15f-25c7-4775-be01-e9c4b91ee8cd.html这个帖子里有更详细的问题,分数也增加了,如果你能帮我解决问题,分数好说

#15


引用 2 楼 bao110908 的回复:
读取时使用 UTF-8,写入时使用 GBK 编码就可以了。

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

PS:1 楼的做法是不可行的。
老兄,这个我试了,但是还是破坏了报文,在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的格式被破坏了,也就是说即使在程序中直接做编码的转换也会破坏报文,那该如何解决呢?

#16


写一个代码过滤器,,什么语言都可以设置!

#17


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

#18


我有办法,我给你代码

#19


引用 17 楼 imlulin 的回复:
大哥 最后好了没有呢? 我也遇到这个问题 奇怪的是 在一个地方可以 另一个地方不行


最后改了一下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转码

#20


有解决方案了吗

#21