2017-03-02 17 views
0

我有一个问题,在那里当最终用户从HTML 表单提交的数据在一个Web应用程序,它们被复制从Word 文件,其中包含长划或EM数据破折号如何转换EM在java中纵横驰骋

根据逻辑,我们试图从数据库中读取这些数据,并将它写入Excel文件。

作为结果,这些字符在excel中生成,如下面所示 ,其中包含一种问号。

Actual output : 1993 � 1995 
Expected output : 1993 – 1995 

我也做了UTF-8编码在Java中,但仍然获得在Excel中相同的输出。如何解决这个问题?

下面是我的代码的摘录。

try { 
     keyStrenghts = new String(keyStrenghts.getBytes("utf-8")); 
     } catch (UnsupportedEncodingException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

我正在使用JDK 6和apache poi来生成excel文件。

回答

0

如果仅限于长破折号这可能会解决你的问题:

keyStrenghts = keyStrenghts.replaceAll("\\p{Pd}", "-"); 

这是使用正则表达式来代替所有的ASCII码破折号“ - ”作为陈述here

+0

按照它应该工作的联系,但它不能正常工作,甚至在Eclipse控制台em短划线没有被打印出来,只出现在问号上。任何想法? – prabu

+1

问题可能不是你所期望的 - 驱动程序在数据库的途中正在破坏,从数据库返回的途径,或者它实际上并不是你认为它的字符。尝试通过使用支持UTF-8的命令行工具连接到数据库并显示它来证明你的假设是错误的。然后确定什么unicode序列回到java。 –

+0

让我来给出更多的细节,数据已经从Word文档复制粘贴到HTML表单,提交后将数据保存到数据库中。现在,如果我们再次从Web应用程序中打开提交的表单,数据看起来很好。所以重点是它可以在前端查看,但无法从数据库读取并在后端写入excel。 – prabu

0

了Unicode是:\ uFFFD

keyStrenghts = "1993 � 1995"; 
if(keyStrenghts.contains("\uFFFD")){ 
    keyStrenghts = keyStrenghts.replace("\uFFFD","-"); 
} 

现在,如果你打印keyStrenghts您将获得:1993年至1995年