Java 中文(简体和繁体)和韩文文本的字符损坏

Java 中文(简体和繁体)和韩文文本的字符损坏,java,mime,postfix-mta,jakarta-mail,mime-types,Java,Mime,Postfix Mta,Jakarta Mail,Mime Types,我有一个设置,邮件服务器(postfix)接收到的电子邮件被接收,生成的电子邮件正文(html或纯文本)和附件被解析为单独的文件并保存,为此我使用javaxmailapi 当电子邮件正文为中文(简体和繁体)(字符集GB2312,根据电子邮件标题)或韩文(字符集ks_c_5601-1987,根据电子邮件标题)时,会出现问题 结果解析的电子邮件正文显示字符损坏(字符显示为“?”) 而且,即使我显式地将字符集保存为电子邮件头所建议的字符集,问题仍然是一样的 我无法理解为什么像Google mail、O

我有一个设置,邮件服务器(postfix)接收到的电子邮件被接收,生成的电子邮件正文(html或纯文本)和附件被解析为单独的文件并保存,为此我使用javaxmailapi

当电子邮件正文为中文(简体和繁体)(字符集GB2312,根据电子邮件标题)或韩文(字符集ks_c_5601-1987,根据电子邮件标题)时,会出现问题

结果解析的电子邮件正文显示字符损坏(字符显示为“?”)

而且,即使我显式地将字符集保存为电子邮件头所建议的字符集,问题仍然是一样的

我无法理解为什么像Google mail、Outlook这样的其他程序可以正确解析邮件正文,而我的代码却不能

请说明我做错了什么

添加示例代码(在我缩小问题范围后):

中文文本如下(以UTF-8编码保存在我的机器上):

以下是对其进行解析并发生字符损坏的代码:

        @Test
    public void testStream() throws IOException{
        FileInputStream in = new FileInputStream("C:\\EmailTest\\Chinese2.txt");        
        String Body = convertStreamToString(in);        

        FileOutputStream fileout = new FileOutputStream("C:\\Out.txt");    
        fileout.write(Body.getBytes(Charset.forName("GB2312")));
        in.close();        
        fileout.flush();
        fileout.close();        
    }

public String convertStreamToString(InputStream is) throws IOException {
        if (is != null) {
            StringBuilder sb = new StringBuilder();
            String line;

            try {
                BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
                while ((line = reader.readLine()) != null) {
                    sb.append(line).append("\n");
                }
            } finally {
                is.close();
            }
            return sb.toString();
        } else {
            return "";
        }
    }
结果如下:

?高雄市??天淹水,高雄市??菊「休息」挨批,?民?今天(10月1日)在高雄市三多商圈?立看板,上面是一??著雨?的民?,示意要大家安?,旁?就?著「?!?菊市?在睡?」。??看板明?是在?刺?菊市???天下午在官邸休息。?民?籍??在??依?持???。

    ?民?在三多商圈?立看板「?!?菊市?在睡?」,?刺意味不言可喻,?民?籍高雄市????娜?,其?很多官?真的都不敢叫醒?菊市?。看板的?容,路?民?一看就知道?的是哪件事,有的民??得疲?休息?可厚非,但也有人??市?休息,不???有人代理指?救?。

    ?民????持?在?????菊救?不力,?於?民??立的看板,?菊?是表示尊重,不?置?。天天遭到??,?菊的心情每天都很沉重。
中新网北京10月1日电 今天是中华人民共和国成立61周年纪念日。今天上午,党和国家领导人胡锦涛、温家宝、贾庆林、李长春、习近平、李克强、贺国强、周永康等,同首都各界代表一起来到天安门广场,向人民英雄纪念碑敬献花篮,深切缅怀为实现民族独立、人民解放和国家富强、人民幸福英勇献身的革命先烈。


随后,全场肃立,向为中国人民解放事业和共和国建设事业英勇献身的烈士们默哀。

  中共中央,全国人大常委会,国务院,全国政协,中央军委,各民主党派、全国工商联和无党派爱国人士,各人民团体,首都各界群众,中国少年先锋队分别敬献的9个大型花篮,一字排开地摆放在人民英雄纪念碑北侧。一个个花篮的红色缎带上写着“人民英雄永垂不朽”8个金色大字,一朵朵盛开的鲜花散发出缕缕清香,寄托着对革命先烈的无限敬仰和无尽怀念。

  在军乐队演奏的激昂深情的《献花曲》旋律中,18名礼兵抬起9个花篮,正步走向人民英雄纪念碑,将花篮摆放到纪念碑基座前。

  胡锦涛等党和国家领导人缓步登上纪念碑基座,在花篮前驻足凝视。

  胡锦涛神情庄重地走近花篮,仔细整理花篮上的红色缎带。

  接着,胡锦涛等党和国家领导人绕行一周,深情瞻仰人民英雄纪念碑。碑座四周的大型浮雕,记载着近代以来中国人民顽强不屈的奋斗历程。胡锦涛等边走边看,向人民英雄致以深深的敬意。

  伴随着动人的乐曲声,首都各界代表排成纵队,依次登上纪念碑基座。他们当中,有身经百战的老战士代表,有胸佩奖章的劳动模范代表,有为成功举办北京奥运会、残奥会做出突出贡献的先进集体和先进个人代表,有来自基层的工人、农民、科技工作者、大中学校师生代表,有军容严整的人民解放军和武警部队官兵,有身着鲜艳服装的少数民族代表,有戴着红领巾的少年儿童……在这个庄严的时刻,人们怀着崇敬的心情瞻仰人民英雄纪念碑,共同缅怀革命先烈的丰功伟绩。

  敬献花篮仪式由中共中央政治局委员、北京市委书记刘淇主持。
是因为Java流类,我才面临这个问题吗

提前谢谢


Ashish

我感觉问题与完全表示汉字所需的字节数有关。您可能想了解Java的Unicode支持的细节和字节原语的大小

或者,将字节转换回UTF-8时可能会出现问题


无论哪种方式,您都应该使用十六进制编辑器查看输入和输出文件,该编辑器允许您处理Unicode模式和BOM(或缺少)。我感觉问题与完全表示汉字所需的字节数有关。您可能想了解Java的Unicode支持的细节和字节原语的大小

或者,将字节转换回UTF-8时可能会出现问题


无论哪种方式,您都应该使用十六进制编辑器查看输入和输出文件,该编辑器允许您处理Unicode模式和BOM(或缺少)。此问题的出现是因为您使用了不正确的编码。如果我接受您的代码,请将“”替换为“”-它可以正常工作。

出现此问题的原因是您使用了不正确的编码。如果我使用您的代码,请将“”替换为“”-它可以正常工作。

查看代码的重要部分会很有用:在哪里用javamail加载正文以及在哪里保存正文。添加了一些示例代码,请查看您遗漏了convertStreamToString(in)方法的定义-这很重要,为了理解该文本的完整“生命周期”,查看代码的重要部分会很有用:在哪里加载javamail正文以及在哪里保存正文“生命周期“在这些文本中,实际上电子邮件标题给出了不正确的编码,因此必须先建立一种机制来替换正确的编码,然后再进行解码。感谢您指出正确的字符集。如果您的环境不支持
GB18030
,请尝试
GBK
GBK
GB2312
的扩展,
GB18030
GBK
的扩展——如果您没有
GB18030
支持,使用
GBK
通常就足够了。实际上电子邮件头的编码不正确,因此,我们必须先制作一种机制来替换正确的编码,然后再进行解码。感谢您指出正确的字符集。如果您的环境不支持
GB18030
,请尝试
GBK
GBK
GB2312
的扩展,
GB18030
GBK
的扩展——如果没有
GB18030
支持,使用
GBK
通常就足够了。
?高雄市??天淹水,高雄市??菊「休息」挨批,?民?今天(10月1日)在高雄市三多商圈?立看板,上面是一??著雨?的民?,示意要大家安?,旁?就?著「?!?菊市?在睡?」。??看板明?是在?刺?菊市???天下午在官邸休息。?民?籍??在??依?持???。

    ?民?在三多商圈?立看板「?!?菊市?在睡?」,?刺意味不言可喻,?民?籍高雄市????娜?,其?很多官?真的都不敢叫醒?菊市?。看板的?容,路?民?一看就知道?的是哪件事,有的民??得疲?休息?可厚非,但也有人??市?休息,不???有人代理指?救?。

    ?民????持?在?????菊救?不力,?於?民??立的看板,?菊?是表示尊重,不?置?。天天遭到??,?菊的心情每天都很沉重。
中新网北京10月1日电 今天是中华人民共和国成立61周年纪念日。今天上午,党和国家领导人胡锦涛、温家宝、贾庆林、李长春、习近平、李克强、贺国强、周永康等,同首都各界代表一起来到天安门广场,向人民英雄纪念碑敬献花篮,深切缅怀为实现民族独立、人民解放和国家富强、人民幸福英勇献身的革命先烈。


随后,全场肃立,向为中国人民解放事业和共和国建设事业英勇献身的烈士们默哀。

  中共中央,全国人大常委会,国务院,全国政协,中央军委,各民主党派、全国工商联和无党派爱国人士,各人民团体,首都各界群众,中国少年先锋队分别敬献的9个大型花篮,一字排开地摆放在人民英雄纪念碑北侧。一个个花篮的红色缎带上写着“人民英雄永垂不朽”8个金色大字,一朵朵盛开的鲜花散发出缕缕清香,寄托着对革命先烈的无限敬仰和无尽怀念。

  在军乐队演奏的激昂深情的《献花曲》旋律中,18名礼兵抬起9个花篮,正步走向人民英雄纪念碑,将花篮摆放到纪念碑基座前。

  胡锦涛等党和国家领导人缓步登上纪念碑基座,在花篮前驻足凝视。

  胡锦涛神情庄重地走近花篮,仔细整理花篮上的红色缎带。

  接着,胡锦涛等党和国家领导人绕行一周,深情瞻仰人民英雄纪念碑。碑座四周的大型浮雕,记载着近代以来中国人民顽强不屈的奋斗历程。胡锦涛等边走边看,向人民英雄致以深深的敬意。

  伴随着动人的乐曲声,首都各界代表排成纵队,依次登上纪念碑基座。他们当中,有身经百战的老战士代表,有胸佩奖章的劳动模范代表,有为成功举办北京奥运会、残奥会做出突出贡献的先进集体和先进个人代表,有来自基层的工人、农民、科技工作者、大中学校师生代表,有军容严整的人民解放军和武警部队官兵,有身着鲜艳服装的少数民族代表,有戴着红领巾的少年儿童……在这个庄严的时刻,人们怀着崇敬的心情瞻仰人民英雄纪念碑,共同缅怀革命先烈的丰功伟绩。

  敬献花篮仪式由中共中央政治局委员、北京市委书记刘淇主持。