【问题标题】:How to convert em dash in java如何在java中转换破折号
【发布时间】:2017-05-09 18:04:41
【问题描述】:

我有一个问题,当最终用户从 HTML 提交数据时 Web 应用程序中的表单,他们正在从 Word 中复制数据 包含长破折号或长破折号的文档。

根据我们试图从数据库中读取这些数据的逻辑, 将其写入excel文件。

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

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

我已经在 J​​ava 中完成了 UTF-8 编码,但在 excel 中仍然得到相同的输出。如何解决?

以下是我的代码摘录。

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

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

【问题讨论】:

    标签: java utf-8 apache-poi


    【解决方案1】:

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

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

    这是使用正则表达式将 所有 破折号替换为 ascii “-”,如 here 所述。

    【讨论】:

    • 根据链接它应该可以工作,但它不工作,即使在 Eclipse 控制台中,em dash 也没有被打印并且只显示为问号。有什么想法吗?
    • 问题可能不是您所期望的——驱动程序在访问数据库、从数据库返回的途中损坏,或者它实际上不是您认为的字符。尝试通过使用支持 UTF-8 的命令行工具连接到数据库并显示它来证明您的哪个假设是错误的。然后确定返回 java 的 unicode 序列是什么。
    • 让我详细说明一下,数据已经从word文档复制粘贴到HTML表单,提交后数据保存到数据库。现在,如果我们再次从 Web 应用程序打开提交的表单,则数据似乎很好。所以关键是它可以在前端查看但无法从数据库中读取并在后端写入到excel。
    【解决方案2】:

    对于 � 的 Unicode 是:\uFFFD

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

    现在,如果您打印 keyStrenghts,您将得到:1993 – 1995

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-18
      • 1970-01-01
      • 2010-09-15
      • 2012-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多