2013-01-22 35 views
0

我有一个场景,其中我从MS Word或Outlook复制数据并将其粘贴到JSP textarea中,然后尝试使用Spring和Hibernate将数据粘贴到Oracle数据库上。问题是下面这句如何将JSP中的智能报价转换为纯文本

它不是唯一的角色,我们也允许 - 和 - 也

被替换到

它不是唯一的角色,我们也允许 和 - 也。

任何人都可以请让我知道如何我可以坚持实际的数据到表中。

注意:如果我输入'和 - 进入textarea并坚持,他们得到保存没有任何问题。只有当我从word/outlook复制文本并将其粘贴到文本区域时才会出现问题。

我试图把以下内容放到我的JSP中,但是无论如何也没有帮助我。

回答

0

答案:按照下面提到的步骤解决。

  1. 留存以下部分

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    

在JSP的头部区段。在元标记之前删除了<标记。

  1. 在我的Web.xml中添加了UTF-8执行器。以下代码被使用。

    <filter> 
    
        <filter-name>encodingFilter/filter-name> 
    
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter/filter-class> 
    
        <init-param> 
    
         <param-name>encoding/param-name> 
    
         <param-value>UTF-8/param-value> 
    
        </init-param> 
    
        <init-param> 
    
         <param-name>forceEncoding/param-name> 
    
         <param-value>true/param-value> 
    
        </init-param> 
    
    </filter> 
    
    <filter-mapping> 
    
        <filter-name>encodingFilter/filter-name> 
    
        <url-pattern>/*/url-pattern> 
    
    </filter-mapping> 
    
  2. 使用实用程序将智能引号转换为纯文本。我使用的实用程序如下(参考文献http://forum.springsource.org/showthread.php?72944-How-to-handle-Smart-Quotes-pasted-into-TextArea-input)。感谢RobertGloverJr发布解决方案的一部分。

    public static void windows1252ToIso8859(StringBuilder sbOriginal) { 
         if (null==sbOriginal) { 
         return; 
         } 
         for (int isb = 0; isb < sbOriginal.length(); isb++) { 
         int origCharAsInt = (int) sbOriginal.charAt(isb); 
         switch (origCharAsInt) { 
    
         case ((int)'\u2018'): sbOriginal.setCharAt(isb, '\''); break; // left single quote 
         case ((int)'\u2019'): sbOriginal.setCharAt(isb, '\''); break; // right single quote 
         case ((int)'\u201A'): sbOriginal.setCharAt(isb, '\''); break; // lower quotation mark 
    
         case ((int)'\u201C'): sbOriginal.setCharAt(isb, '"'); break; // left double quote 
         case ((int)'\u201D'): sbOriginal.setCharAt(isb, '"'); break; // right double quote 
         case ((int)'\u201E'): sbOriginal.setCharAt(isb, '"'); break; // double low quotation mark 
    
         case ((int)'\u2039'): sbOriginal.setCharAt(isb, '\''); break; // Single Left-Pointing Quotation Mark 
         case ((int)'\u203A'): sbOriginal.setCharAt(isb, '\''); break; // Single right-Pointing Quotation Mark 
    
         case ((int)'\u02DC'): sbOriginal.setCharAt(isb, '~'); break; // Small Tilde 
    
         case ((int)'\u2013'): sbOriginal.setCharAt(isb, '-'); break; // En Dash 
         case ((int)'\u2014'): sbOriginal.setCharAt(isb, '-'); break; // EM Dash 
    
         default: break; 
         } 
         } 
        } 
    
        public static String windows1252ToIso8859(String strOriginal) { 
         if (null==strOriginal) { 
         return null; 
         } 
         StringBuilder sbOrig = new StringBuilder(strOriginal); 
         windows1252ToIso8859(sbOrig); 
         return sbOrig.toString(); 
        } 
    
  3. 最后改变了我的DAO层的setter方法,使用上面提到的实用工具,如下所示。上述所有的

    public String getIncidentShrtDescC() { 
        return this.incidentShrtDescC; 
    } 
    
    public void setIncidentShrtDescC(String incidentShrtDescC) { 
        this.incidentShrtDescC = AppGlobalUtil.windows1252ToIso8859(incidentShrtDescC); 
    } 
    

组合帮助解决这个问题。希望这篇文章能够帮助一些流浪的灵魂面对同样的问题。

快乐编码。