有个base64字符串,怎么转为中文?

时间:2022-06-23 21:48:24
String subject = "=?gb2312?B?yerS+M3yufpf0MK5ybaovNtfMzAwMTU4KE7V8barKV/Cpsql7qOjrMLe+YJf?=  =?gb2312?B?o6qjql/UpLzGyc/K0MrXyNW5ybzbMzktNDTUqqGj?=";

subject = new String(subject.getBytes("ISO8859_1"), "gb2312");

subject = MimeUtility.decodeText(subject);// base64解码

System.out.println(subject);

结果是:申银万国_新股定价_300158(N振东)_娄圣睿,罗 _**_预计上市首日股价39-44元。


正确中文名: 申银万国_新股定价_300158(N振东)_娄圣睿,罗鶄_**_预计上市首日股价39-44元。 

该怎么解码才能正确呢?

6 个解决方案

#1


引用楼主 hcf_1118 的回复:
String subject = "=?gb2312?B?yerS+M3yufpf0MK5ybaovNtfMzAwMTU4KE7V8barKV/Cpsql7qOjrMLe+YJf?= =?gb2312?B?o6qjql/UpLzGyc/K0MrXyNW5ybzbMzktNDTUqqGj?=";

subject = new String(subject.getBytes("ISO8859_1"……

   转化成GBK
   

#2


为啥我转码后是这样的呢
yerS+M3yufpf0MK5ybaovNtfMzAwMTU4KE7V8barKV/Cpsql7qOjrMLe+YJfo6qjql/UpLzGyc/K
0MrXyNW5ybzbMzktNDTUqqGj

#3


这句其实相当于没用
subject = new String(subject.getBytes("ISO8859_1"), "gb2312");
结果仍是原文 因为源码没超出ISO8859_1范围

真正解码的是MimeUtility.decodeText方法,那原因基本上就是源码串,本来是怎么编码的呢

#4


直接转就可以了:

import java.io.UnsupportedEncodingException;

import javax.mail.internet.MimeUtility;

public class Test {

    public static void main(String[] args) throws UnsupportedEncodingException {
        String subject = "=?gb2312?B?yerS+M3yufpf0MK5ybaovNtfMzAwMTU4KE7V8barKV/Cpsql7qOjrMLe+YJf?= =?gb2312?B?o6qjql/UpLzGyc/K0MrXyNW5ybzbMzktNDTUqqGj?=";
        System.out.println(MimeUtility.decodeText(subject));
    }
}


MimeUtility.decodeText 内部都帮你做好了。

#5


申银万国_新股定价_300158(N振东)_娄圣睿,罗 _**_预计上市首日股价39-44元。

你的 subject 在编码时就有问题了,设定的字符集不正确!

 不是 GB2312 中的汉字!

应该用这个方法进行编码:

String subject = "申银万国_新股定价_300158(N振东)_娄圣睿,罗鶄_**_预计上市首日股价39-44元。 ";
System.out.println(MimeUtility.encodeText(subject, "gbk", "b"));


得到的 subject 为:

=?gbk?b?yerS+M3yufpf0MK5ybaovNtfMzAwMTU4KE7V8barKV/Cpsql?= =?gbk?b?7qOjrMLe+YJfo6qjql/UpLzGyc/K0MrXyNW5ybzbMzktNDTUqqGjIA==?=

#6


gb2312没有哪个字符,你用GBK,或者GB18030就可以了。

#1


引用楼主 hcf_1118 的回复:
String subject = "=?gb2312?B?yerS+M3yufpf0MK5ybaovNtfMzAwMTU4KE7V8barKV/Cpsql7qOjrMLe+YJf?= =?gb2312?B?o6qjql/UpLzGyc/K0MrXyNW5ybzbMzktNDTUqqGj?=";

subject = new String(subject.getBytes("ISO8859_1"……

   转化成GBK
   

#2


为啥我转码后是这样的呢
yerS+M3yufpf0MK5ybaovNtfMzAwMTU4KE7V8barKV/Cpsql7qOjrMLe+YJfo6qjql/UpLzGyc/K
0MrXyNW5ybzbMzktNDTUqqGj

#3


这句其实相当于没用
subject = new String(subject.getBytes("ISO8859_1"), "gb2312");
结果仍是原文 因为源码没超出ISO8859_1范围

真正解码的是MimeUtility.decodeText方法,那原因基本上就是源码串,本来是怎么编码的呢

#4


直接转就可以了:

import java.io.UnsupportedEncodingException;

import javax.mail.internet.MimeUtility;

public class Test {

    public static void main(String[] args) throws UnsupportedEncodingException {
        String subject = "=?gb2312?B?yerS+M3yufpf0MK5ybaovNtfMzAwMTU4KE7V8barKV/Cpsql7qOjrMLe+YJf?= =?gb2312?B?o6qjql/UpLzGyc/K0MrXyNW5ybzbMzktNDTUqqGj?=";
        System.out.println(MimeUtility.decodeText(subject));
    }
}


MimeUtility.decodeText 内部都帮你做好了。

#5


申银万国_新股定价_300158(N振东)_娄圣睿,罗 _**_预计上市首日股价39-44元。

你的 subject 在编码时就有问题了,设定的字符集不正确!

 不是 GB2312 中的汉字!

应该用这个方法进行编码:

String subject = "申银万国_新股定价_300158(N振东)_娄圣睿,罗鶄_**_预计上市首日股价39-44元。 ";
System.out.println(MimeUtility.encodeText(subject, "gbk", "b"));


得到的 subject 为:

=?gbk?b?yerS+M3yufpf0MK5ybaovNtfMzAwMTU4KE7V8barKV/Cpsql?= =?gbk?b?7qOjrMLe+YJfo6qjql/UpLzGyc/K0MrXyNW5ybzbMzktNDTUqqGjIA==?=

#6


gb2312没有哪个字符,你用GBK,或者GB18030就可以了。